{
  "uploaded_files": [
    {
      "filename": "AUROBINDO PHARMA LTD. - BATCH MANUFACTURING RECORD  Batch BTC0048  Paracetamol Tablets 500mg.pdf",
      "size": 8567361,
      "status": "uploaded"
    },
    {
      "filename": "Batch_Record_BTC0048_Aurobindo.xlsx",
      "size": 7330,
      "status": "uploaded"
    },
    {
      "filename": "Deviation_DEV20240312.json",
      "size": 5674,
      "status": "uploaded"
    },
    {
      "filename": "Equipment_Logs_EQP_GRAN_01.csv",
      "size": 3765,
      "status": "uploaded"
    },
    {
      "filename": "LIMS_Results_BTC0048.csv",
      "size": 2448,
      "status": "uploaded"
    },
    {
      "filename": "Maintenance_Log_EQP_GRAN_01.csv",
      "size": 5189,
      "status": "uploaded"
    },
    {
      "filename": "SOP_Process_Granulation_Aurobindo.pdf",
      "size": 11312,
      "status": "uploaded"
    }
  ],
  "classifications": [
    {
      "filename": "AUROBINDO PHARMA LTD. - BATCH MANUFACTURING RECORD  Batch BTC0048  Paracetamol Tablets 500mg.pdf",
      "document_type": "Batch Record",
      "document_type_code": "BMR",
      "confidence": 95,
      "batch_id": "BTC0048",
      "product_name": "Paracetamol Tablets 500mg",
      "equipment_id": null,
      "plant": null,
      "date_range": null,
      "key_fields_found": [
        "Batch ID",
        "Product Name"
      ],
      "missing_context": [
        "Equipment ID",
        "Plant",
        "Date Range"
      ],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "Batch_Record_BTC0048_Aurobindo.xlsx",
      "document_type": "Batch Record",
      "document_type_code": "BMR",
      "confidence": 95,
      "batch_id": "BTC0048",
      "product_name": "Paracetamol Tablets 500mg",
      "equipment_id": null,
      "plant": "Unit-III Hyderabad",
      "date_range": "2024-10-12",
      "key_fields_found": [
        "Batch: BTC0048",
        "Paracetamol Tablets 500mg",
        "Manufacturing Date: 2024-10-12",
        "Plant: Unit-III Hyderabad",
        "Status: DEVIATION DETECTED"
      ],
      "missing_context": [],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "Deviation_DEV20240312.json",
      "document_type": "Deviation Report",
      "document_type_code": "DEV",
      "confidence": 95,
      "batch_id": "BTC0048",
      "product_name": "Paracetamol Tablets 500mg",
      "equipment_id": "EQP_GRAN_01",
      "plant": "Unit III, Hyderabad",
      "date_range": "2024-10-12",
      "key_fields_found": [
        "Deviation_ID",
        "Batch_ID",
        "Product",
        "Plant",
        "Date_of_Occurrence",
        "Deviation_Type",
        "Severity",
        "Description",
        "Immediate_Actions_Taken",
        "Equipment_Details"
      ],
      "missing_context": [],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "Equipment_Logs_EQP_GRAN_01.csv",
      "document_type": "Equipment Log",
      "document_type_code": "EQP",
      "confidence": 95,
      "batch_id": null,
      "product_name": null,
      "equipment_id": "EQP_GRAN_01",
      "plant": null,
      "date_range": "2024-10-12 06:45 to 2024-10-12 09:15",
      "key_fields_found": [
        "Timestamp",
        "Equipment_ID",
        "Parameter",
        "Value",
        "Unit",
        "Setpoint",
        "Lower_Limit",
        "Upper_Limit",
        "Status",
        "Operator_ID",
        "Notes"
      ],
      "missing_context": [
        "batch_id",
        "product_name",
        "plant"
      ],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "LIMS_Results_BTC0048.csv",
      "document_type": "LIMS Results",
      "document_type_code": "LIMS",
      "confidence": 95,
      "batch_id": "BTC0048",
      "product_name": null,
      "equipment_id": null,
      "plant": null,
      "date_range": "2024-10-12 to 2024-10-15",
      "key_fields_found": [
        "Batch_ID",
        "Test_Name",
        "Result_Value",
        "Specification_Low",
        "Specification_High",
        "Status",
        "Test_Date",
        "Analyst_ID",
        "Instrument_ID"
      ],
      "missing_context": [
        "product_name",
        "equipment_id",
        "plant"
      ],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "Maintenance_Log_EQP_GRAN_01.csv",
      "document_type": "Maintenance Log",
      "document_type_code": "MAINT",
      "confidence": 95,
      "batch_id": null,
      "product_name": null,
      "equipment_id": "EQP_GRAN_01",
      "plant": null,
      "date_range": "2024-01-08 to 2024-10-12",
      "key_fields_found": [
        "Equipment_ID",
        "Maintenance_Date",
        "Maintenance_Type",
        "Performed_By",
        "Duration_Hours",
        "Observation",
        "Action_Taken",
        "Next_PM_Due",
        "Work_Order_ID",
        "Sign_Off_By",
        "Status"
      ],
      "missing_context": [],
      "status": "classified",
      "verification_status": "VERIFIED"
    },
    {
      "filename": "SOP_Process_Granulation_Aurobindo.pdf",
      "document_type": "SOP",
      "document_type_code": "SOP",
      "confidence": 95,
      "batch_id": null,
      "product_name": "Paracetamol 500mg Tablets",
      "equipment_id": "EQP_GRAN_01",
      "plant": "Unit III, Hyderabad",
      "date_range": "01-Apr-2024 to 31-Mar-2025",
      "key_fields_found": [
        "SOP Number",
        "Version",
        "Effective Date",
        "Review Date",
        "Author",
        "Approved By",
        "Applicable Products",
        "Critical Process Parameters"
      ],
      "missing_context": [],
      "status": "classified",
      "verification_status": "VERIFIED"
    }
  ],
  "extractions": {
    "files": [
      {
        "filename": "AUROBINDO PHARMA LTD. - BATCH MANUFACTURING RECORD  Batch BTC0048  Paracetamol Tablets 500mg.pdf",
        "document_type_code": "BMR",
        "batch_id": "BTC0048",
        "product_name": "Paracetamol Tablets 500mg",
        "plant": null,
        "manufacturing_date": "2021-10-12",
        "parameters": [
          {
            "parameter_name": "Net air temp",
            "observed_value": "61.2",
            "lower_limit": "40",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_DISP01",
            "timestamp": "2021-10-8",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Tablet air temp",
            "observed_value": "42.5",
            "lower_limit": "40",
            "upper_limit": "60",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_DISP02",
            "timestamp": "2021-10-7",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Raw material weight",
            "observed_value": "5.2",
            "lower_limit": "5",
            "upper_limit": "6",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP03",
            "timestamp": "2021-10-9",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Raw material weight",
            "observed_value": "24.9",
            "lower_limit": "24",
            "upper_limit": "26",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP04",
            "timestamp": "2021-10-10",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Product Bed Temp",
            "observed_value": "63.1",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_DISP02",
            "timestamp": "2021-10-6",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          }
        ],
        "lims_results": [],
        "equipment_readings": [],
        "maintenance_records": [],
        "deviation_details": {
          "deviation_id": null,
          "severity": null,
          "description": null,
          "reported_by": null,
          "date_of_occurrence": null,
          "time_of_occurrence": null,
          "immediate_actions": [],
          "equipment_id": null,
          "calibration_status": null,
          "batch_disposition": null,
          "root_cause_preliminary": null,
          "linked_records": null
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 5,
          "total_lims_results": 0,
          "total_equipment_readings": 0,
          "total_maintenance_records": 0,
          "deviations_found": 0,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [],
          "equipment_found": [
            "EQP_DISP01",
            "EQP_DISP02",
            "EQP_DISP03",
            "EQP_DISP04"
          ],
          "extraction_method": "gpt4o_vision_ocr"
        },
        "status": "extracted"
      },
      {
        "filename": "Batch_Record_BTC0048_Aurobindo.xlsx",
        "document_type_code": "BMR",
        "batch_id": "BTC0048",
        "product_name": "Paracetamol Tablets 500mg",
        "plant": "Unit-III Hyderabad",
        "manufacturing_date": "2024-10-12",
        "parameters": [
          {
            "parameter_name": "Raw Material Weight - Paracetamol API",
            "observed_value": "500.2",
            "lower_limit": "498",
            "upper_limit": "502",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "timestamp": "2024-10-12 06:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Raw Material Weight - MCC PH102",
            "observed_value": "89.8",
            "lower_limit": "88",
            "upper_limit": "92",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "timestamp": "2024-10-12 06:05",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Raw Material Weight - Starch (Maize)",
            "observed_value": "24.9",
            "lower_limit": "24",
            "upper_limit": "26",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "timestamp": "2024-10-12 06:10",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Raw Material Weight - Magnesium Stearate",
            "observed_value": "5",
            "lower_limit": "4.8",
            "upper_limit": "5.2",
            "unit": "kg",
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "timestamp": "2024-10-12 06:15",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Inlet Air Temperature",
            "observed_value": "61.2",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 07:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Outlet Air Temperature",
            "observed_value": "42.5",
            "lower_limit": "40",
            "upper_limit": "50",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 07:15",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Product Bed Temperature",
            "observed_value": "63.1",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 07:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Inlet Air Temperature",
            "observed_value": "68.4",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 07:45",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Inlet Air Temperature",
            "observed_value": "74.8",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 08:00",
            "operator_id": null,
            "status": "DEVIATION",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Product Bed Temperature",
            "observed_value": "78.2",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 08:15",
            "operator_id": null,
            "status": "DEVIATION",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Binder Solution Addition Rate",
            "observed_value": "3.1",
            "lower_limit": "2.8",
            "upper_limit": "3.5",
            "unit": "kg/min",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 08:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Impeller Speed",
            "observed_value": "250",
            "lower_limit": "220",
            "upper_limit": "280",
            "unit": "rpm",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 08:45",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Loss on Drying (LOD) \u2014 IPC",
            "observed_value": "2.3",
            "lower_limit": "1.5",
            "upper_limit": "3",
            "unit": "%",
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "timestamp": "2024-10-12 09:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Inlet Air Temperature",
            "observed_value": "65",
            "lower_limit": "60",
            "upper_limit": "70",
            "unit": "\u00b0C",
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "timestamp": "2024-10-12 09:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Product Temperature",
            "observed_value": "52.1",
            "lower_limit": "45",
            "upper_limit": "60",
            "unit": "\u00b0C",
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "timestamp": "2024-10-12 10:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Exhaust Air Temperature",
            "observed_value": "38.2",
            "lower_limit": "35",
            "upper_limit": "45",
            "unit": "\u00b0C",
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "timestamp": "2024-10-12 10:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "LOD \u2014 Post Drying",
            "observed_value": "1.8",
            "lower_limit": "1",
            "upper_limit": "2.5",
            "unit": "%",
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "timestamp": "2024-10-12 11:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Main Compression Force",
            "observed_value": "12.1",
            "lower_limit": "10",
            "upper_limit": "15",
            "unit": "kN",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 12:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Pre-Compression Force",
            "observed_value": "2.4",
            "lower_limit": "1.5",
            "upper_limit": "3.5",
            "unit": "kN",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 12:15",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Tablet Hardness (IPC)",
            "observed_value": "6.2",
            "lower_limit": "5",
            "upper_limit": "8",
            "unit": "kP",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 12:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Tablet Thickness",
            "observed_value": "3.41",
            "lower_limit": "3.3",
            "upper_limit": "3.6",
            "unit": "mm",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 12:45",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Disintegration Time",
            "observed_value": "5.2",
            "lower_limit": "0",
            "upper_limit": "10",
            "unit": "min",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 13:00",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Average Tablet Weight",
            "observed_value": "501.4",
            "lower_limit": "495",
            "upper_limit": "505",
            "unit": "mg",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 13:15",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          },
          {
            "parameter_name": "Friability",
            "observed_value": "0.42",
            "lower_limit": "0",
            "upper_limit": "1",
            "unit": "%",
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "timestamp": "2024-10-12 13:30",
            "operator_id": null,
            "status": "Normal",
            "notes": null,
            "source_reference": null,
            "confidence": 100
          }
        ],
        "lims_results": [],
        "equipment_readings": [],
        "maintenance_records": [],
        "deviation_details": {
          "deviation_id": null,
          "severity": null,
          "description": null,
          "reported_by": null,
          "date_of_occurrence": null,
          "time_of_occurrence": null,
          "immediate_actions": [],
          "equipment_id": null,
          "calibration_status": null,
          "batch_disposition": null,
          "root_cause_preliminary": null,
          "linked_records": null
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 26,
          "total_lims_results": 0,
          "total_equipment_readings": 0,
          "total_maintenance_records": 0,
          "deviations_found": 2,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [],
          "equipment_found": [
            "EQP_DISP_01",
            "EQP_GRAN_01",
            "EQP_DRYR_01",
            "EQP_COMP_01"
          ],
          "extraction_method": "text"
        },
        "status": "extracted"
      },
      {
        "filename": "Deviation_DEV20240312.json",
        "document_type_code": "DEV",
        "batch_id": "BTC0048",
        "product_name": "Paracetamol Tablets 500mg",
        "plant": "Unit III, Hyderabad",
        "manufacturing_date": null,
        "parameters": [],
        "lims_results": [],
        "equipment_readings": [],
        "maintenance_records": [],
        "deviation_details": {
          "deviation_id": "DEV-2024-0312",
          "severity": "Critical",
          "description": "During wet granulation of batch BTC0048 (Paracetamol Tablets 500mg) on 2024-10-12, the inlet air temperature of fluid bed granulator EQP_GRAN_01 exceeded the validated upper limit of 70\u00b0C at 08:00 hrs. Temperature readings recorded in the batch manufacturing record show a progressive rise from the normal operating range: 61.2\u00b0C (07:00), 63.1\u00b0C (07:30), 68.4\u00b0C (07:45), and 74.8\u00b0C (08:00). The product bed temperature simultaneously rose to 78.2\u00b0C at 08:15 hrs, which is 8.2\u00b0C above the upper specification limit of 70\u00b0C. Granulation was stopped immediately at 08:20 hrs upon detection. A total of approximately 40 minutes of granulation was conducted under temperature exceedance conditions. Equipment EQP_GRAN_01 was taken out of service for investigation.",
          "reported_by": "V. Srinivas, Sr. Production Manager",
          "date_of_occurrence": "2024-10-12",
          "time_of_occurrence": "08:00",
          "immediate_actions": [
            "Granulation process stopped immediately at 08:20 hrs upon temperature exceedance confirmed.",
            "Granules quarantined in-process. Quarantine label DEV-2024-0312-HOLD applied.",
            "Equipment EQP_GRAN_01 taken out of service. Do Not Use tag applied.",
            "QA Manager notified \u2014 K. Reddy informed at 08:25 hrs.",
            "Maintenance team requested to inspect EQP_GRAN_01 temperature sensor and heating element.",
            "Retain samples collected from granules for additional testing.",
            "LIMS order raised for full release testing including assay, dissolution, and related substances."
          ],
          "equipment_id": "EQP_GRAN_01",
          "calibration_status": "OVERDUE \u2014 2 days past due at time of deviation",
          "batch_disposition": "HOLD \u2014 Pending investigation completion and QA Manager review",
          "root_cause_preliminary": "Temperature sensor (thermocouple) malfunction or drift due to overdue calibration and previously noted connector oxidation. Sensor may have been providing inaccurate feedback to the PID controller, causing the heating element to continue heating beyond the setpoint.",
          "linked_records": {
            "OOS_Reference": "OOS-2024-0048",
            "Equipment_Log_Reference": "EQL-EQP_GRAN_01-20241012",
            "Maintenance_Log_Reference": "MNT-EQP_GRAN_01-20240715",
            "BMR_Reference": "BMR-AURO-PARA-500-BTC0048",
            "LIMS_Sample_References": [
              "SAMP-BTC0048-001",
              "SAMP-BTC0048-002"
            ]
          }
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 0,
          "total_lims_results": 0,
          "total_equipment_readings": 0,
          "total_maintenance_records": 0,
          "deviations_found": 1,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [
            "V. Srinivas",
            "QA Analyst on-site",
            "Engineering Supervisor",
            "K. Reddy, QA Manager",
            "QC Analyst"
          ],
          "equipment_found": [
            "EQP_GRAN_01"
          ],
          "extraction_method": "text"
        },
        "status": "extracted"
      },
      {
        "filename": "Equipment_Logs_EQP_GRAN_01.csv",
        "document_type_code": "EQP",
        "batch_id": null,
        "product_name": null,
        "plant": null,
        "manufacturing_date": null,
        "parameters": [],
        "lims_results": [],
        "equipment_readings": [
          {
            "timestamp": "2024-10-12 06:45",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "22.4",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Pre-heat phase. Equipment starting up. Temperature rising to setpoint."
          },
          {
            "timestamp": "2024-10-12 07:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "61.2",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Setpoint reached. Granulation commenced. Materials loaded."
          },
          {
            "timestamp": "2024-10-12 07:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "58.8",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Product bed warming up. Within range."
          },
          {
            "timestamp": "2024-10-12 07:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Motor_Load",
            "value": "42.1",
            "unit": "%",
            "setpoint": "45.0",
            "lower_limit": "30.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Impeller running at 250 rpm. Normal load."
          },
          {
            "timestamp": "2024-10-12 07:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "62.8",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Temperature stable within range."
          },
          {
            "timestamp": "2024-10-12 07:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "61.5",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Product bed temperature stable."
          },
          {
            "timestamp": "2024-10-12 07:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Motor_Load",
            "value": "44.8",
            "unit": "%",
            "setpoint": "45.0",
            "lower_limit": "30.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Load stable. Binder addition commenced."
          },
          {
            "timestamp": "2024-10-12 07:30",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "64.3",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Inlet temperature rising slightly. Normal trend."
          },
          {
            "timestamp": "2024-10-12 07:30",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "63.1",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Product bed within range."
          },
          {
            "timestamp": "2024-10-12 07:45",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "68.4",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Temperature approaching upper limit. Operator notified. Monitoring increased."
          },
          {
            "timestamp": "2024-10-12 07:45",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "65.9",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Product bed within range but trending upward."
          },
          {
            "timestamp": "2024-10-12 07:45",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Motor_Load",
            "value": "47.2",
            "unit": "%",
            "setpoint": "45.0",
            "lower_limit": "30.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Slightly elevated. Acceptable."
          },
          {
            "timestamp": "2024-10-12 08:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "74.8",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "TEMPERATURE EXCEEDED UPPER LIMIT (70\u00b0C). Inlet at 74.8\u00b0C \u2014 4.8\u00b0C above limit. Alarm triggered. Supervisor notified immediately."
          },
          {
            "timestamp": "2024-10-12 08:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "70.4",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "Product bed also at limit. Heating element not responding to setpoint reduction command."
          },
          {
            "timestamp": "2024-10-12 08:00",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Motor_Load",
            "value": "52.8",
            "unit": "%",
            "setpoint": "45.0",
            "lower_limit": "30.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Motor load increased \u2014 possible granule agglomeration due to temperature."
          },
          {
            "timestamp": "2024-10-12 08:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "76.2",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "CRITICAL: Temperature still rising despite setpoint reduction. Thermocouple suspected malfunction. PID controller not responding correctly."
          },
          {
            "timestamp": "2024-10-12 08:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "78.2",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "CRITICAL: Product bed at 78.2\u00b0C \u2014 8.2\u00b0C above upper limit. Process stopped manually at 08:20 hrs by operator on QA instruction."
          },
          {
            "timestamp": "2024-10-12 08:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Motor_Load",
            "value": "58.4",
            "unit": "%",
            "setpoint": "45.0",
            "lower_limit": "30.0",
            "upper_limit": "70.0",
            "status": "Normal",
            "operator_id": "OPR-014",
            "notes": "Motor load elevated due to increased granule viscosity at high temperature."
          },
          {
            "timestamp": "2024-10-12 08:20",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "76.8",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "Process stopped. Air flow maintained to cool product. Do Not Use tag applied."
          },
          {
            "timestamp": "2024-10-12 08:20",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Product_Bed_Temperature",
            "value": "79.1",
            "unit": "\u00b0C",
            "setpoint": "65.0",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "status": "Alert",
            "operator_id": "OPR-014",
            "notes": "Highest recorded product bed temperature. Equipment isolated. Engineering inspection requested."
          },
          {
            "timestamp": "2024-10-12 08:35",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "68.2",
            "unit": "\u00b0C",
            "setpoint": "0.0",
            "lower_limit": "0.0",
            "upper_limit": "0.0",
            "status": "Normal",
            "operator_id": "ENG-002",
            "notes": "Cooling phase. Process stopped. Temperature beginning to fall. Engineering team on-site."
          },
          {
            "timestamp": "2024-10-12 08:50",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "55.1",
            "unit": "\u00b0C",
            "setpoint": "0.0",
            "lower_limit": "0.0",
            "upper_limit": "0.0",
            "status": "Normal",
            "operator_id": "ENG-002",
            "notes": "Cooling. Equipment under engineering inspection."
          },
          {
            "timestamp": "2024-10-12 09:15",
            "equipment_id": "EQP_GRAN_01",
            "parameter": "Inlet_Air_Temperature",
            "value": "32.4",
            "unit": "\u00b0C",
            "setpoint": "0.0",
            "lower_limit": "0.0",
            "upper_limit": "0.0",
            "status": "Normal",
            "operator_id": "ENG-002",
            "notes": "Equipment cooled. Thermocouple removed for inspection. Confirmed: thermocouple connector corroded \u2014 inaccurate high reading being sent to PID controller."
          }
        ],
        "maintenance_records": [],
        "deviation_details": {
          "deviation_id": null,
          "severity": null,
          "description": null,
          "reported_by": null,
          "date_of_occurrence": null,
          "time_of_occurrence": null,
          "immediate_actions": [],
          "equipment_id": null,
          "calibration_status": null,
          "batch_disposition": null,
          "root_cause_preliminary": null,
          "linked_records": null
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 0,
          "total_lims_results": 0,
          "total_equipment_readings": 24,
          "total_maintenance_records": 0,
          "deviations_found": 0,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [
            "OPR-014",
            "ENG-002"
          ],
          "equipment_found": [
            "EQP_GRAN_01"
          ],
          "extraction_method": "text"
        },
        "status": "extracted"
      },
      {
        "filename": "LIMS_Results_BTC0048.csv",
        "document_type_code": "LIMS",
        "batch_id": "BTC0048",
        "product_name": null,
        "plant": null,
        "manufacturing_date": null,
        "parameters": [],
        "lims_results": [
          {
            "sample_id": "SAMP-BTC0048-001",
            "test_name": "Assay (HPLC)",
            "result_value": "95.4",
            "specification_low": "98.0",
            "specification_high": "102.0",
            "unit": "% LC",
            "status": "Fail",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-003",
            "instrument_id": "INS-HPLC-02",
            "notes": "Result below specification lower limit. OOS investigation initiated. Linked to granulation temperature deviation on 2024-10-12."
          },
          {
            "sample_id": "SAMP-BTC0048-002",
            "test_name": "Assay (HPLC) \u2014 Re-test",
            "result_value": "95.8",
            "specification_low": "98.0",
            "specification_high": "102.0",
            "unit": "% LC",
            "status": "Fail",
            "test_date": "2024-10-15",
            "analyst_id": "QC-ANL-007",
            "instrument_id": "INS-HPLC-01",
            "notes": "Re-test confirms OOS. Different instrument and analyst used. OOS-0048 confirmed."
          },
          {
            "sample_id": "SAMP-BTC0048-003",
            "test_name": "Dissolution (30 min Q)",
            "result_value": "82.4",
            "specification_low": "80.0",
            "specification_high": null,
            "unit": "% Released",
            "status": "Pass",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-003",
            "instrument_id": "INS-DISS-01",
            "notes": "Result meets NLT 80% (Q) specification."
          },
          {
            "sample_id": "SAMP-BTC0048-004",
            "test_name": "Dissolution (45 min)",
            "result_value": "94.2",
            "specification_low": "80.0",
            "specification_high": null,
            "unit": "% Released",
            "status": "Pass",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-003",
            "instrument_id": "INS-DISS-01",
            "notes": "Extended dissolution point \u2014 within acceptable range."
          },
          {
            "sample_id": "SAMP-BTC0048-005",
            "test_name": "Tablet Hardness",
            "result_value": "6.4",
            "specification_low": "5.0",
            "specification_high": "8.0",
            "unit": "kP",
            "status": "Pass",
            "test_date": "2024-10-13",
            "analyst_id": "QC-ANL-005",
            "instrument_id": "INS-HARD-01",
            "notes": "Hardness within specification range."
          },
          {
            "sample_id": "SAMP-BTC0048-006",
            "test_name": "Friability",
            "result_value": "0.38",
            "specification_low": "0.0",
            "specification_high": "1.0",
            "unit": "%",
            "status": "Pass",
            "test_date": "2024-10-13",
            "analyst_id": "QC-ANL-005",
            "instrument_id": "INS-FRIA-01",
            "notes": "Friability within specification."
          },
          {
            "sample_id": "SAMP-BTC0048-007",
            "test_name": "Average Tablet Weight",
            "result_value": "501.2",
            "specification_low": "495.0",
            "specification_high": "505.0",
            "unit": "mg",
            "status": "Pass",
            "test_date": "2024-10-13",
            "analyst_id": "QC-ANL-005",
            "instrument_id": "INS-BAL-02",
            "notes": "Weight uniformity within specification."
          },
          {
            "sample_id": "SAMP-BTC0048-008",
            "test_name": "Disintegration Time",
            "result_value": "5.8",
            "specification_low": "0.0",
            "specification_high": "10.0",
            "unit": "min",
            "status": "Pass",
            "test_date": "2024-10-13",
            "analyst_id": "QC-ANL-005",
            "instrument_id": "INS-DINT-01",
            "notes": "Disintegration within IP specification."
          },
          {
            "sample_id": "SAMP-BTC0048-009",
            "test_name": "Loss on Drying (Post-Drying)",
            "result_value": "1.9",
            "specification_low": "1.0",
            "specification_high": "2.5",
            "unit": "%",
            "status": "Pass",
            "test_date": "2024-10-12",
            "analyst_id": "QC-ANL-002",
            "instrument_id": "INS-KF-01",
            "notes": "Post-drying LOD within specification."
          },
          {
            "sample_id": "SAMP-BTC0048-010",
            "test_name": "Related Substances (HPLC)",
            "result_value": "0.08",
            "specification_low": "0.0",
            "specification_high": "0.5",
            "unit": "%",
            "status": "Pass",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-003",
            "instrument_id": "INS-HPLC-02",
            "notes": "Related substances within ICH limit."
          },
          {
            "sample_id": "SAMP-BTC0048-011",
            "test_name": "Identification (IR)",
            "result_value": "Complies",
            "specification_low": null,
            "specification_high": null,
            "unit": null,
            "status": "Pass",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-004",
            "instrument_id": "INS-IR-01",
            "notes": "Identity confirmed by IR spectroscopy vs reference."
          },
          {
            "sample_id": "SAMP-BTC0048-012",
            "test_name": "Microbial Limit \u2014 TAMC",
            "result_value": "45",
            "specification_low": "0",
            "specification_high": "100",
            "unit": "CFU/g",
            "status": "Pass",
            "test_date": "2024-10-15",
            "analyst_id": "QC-ANL-006",
            "instrument_id": "INS-MIC-01",
            "notes": "TAMC within IP specification of NMT 100 CFU/g."
          },
          {
            "sample_id": "SAMP-BTC0048-013",
            "test_name": "Microbial Limit \u2014 TYMC",
            "result_value": "8",
            "specification_low": "0",
            "specification_high": "10",
            "unit": "CFU/g",
            "status": "Pass",
            "test_date": "2024-10-15",
            "analyst_id": "QC-ANL-006",
            "instrument_id": "INS-MIC-01",
            "notes": "TYMC within IP specification of NMT 10 CFU/g."
          },
          {
            "sample_id": "SAMP-BTC0048-014",
            "test_name": "Uniformity of Dosage Units (CV%)",
            "result_value": "2.1",
            "specification_low": "0.0",
            "specification_high": "6.0",
            "unit": "%",
            "status": "Pass",
            "test_date": "2024-10-14",
            "analyst_id": "QC-ANL-003",
            "instrument_id": "INS-BAL-01",
            "notes": "CV% within AV acceptance criteria per USP <905>."
          },
          {
            "sample_id": "SAMP-BTC0048-015",
            "test_name": "Water Activity (Aw)",
            "result_value": "0.42",
            "specification_low": "0.0",
            "specification_high": "0.60",
            "unit": "Aw",
            "status": "Pass",
            "test_date": "2024-10-12",
            "analyst_id": "QC-ANL-002",
            "instrument_id": "INS-WA-01",
            "notes": "Water activity within limits \u2014 no microbial growth risk."
          }
        ],
        "equipment_readings": [],
        "maintenance_records": [],
        "deviation_details": {
          "deviation_id": null,
          "severity": null,
          "description": null,
          "reported_by": null,
          "date_of_occurrence": null,
          "time_of_occurrence": null,
          "immediate_actions": [],
          "equipment_id": null,
          "calibration_status": null,
          "batch_disposition": null,
          "root_cause_preliminary": null,
          "linked_records": null
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 0,
          "total_lims_results": 15,
          "total_equipment_readings": 0,
          "total_maintenance_records": 0,
          "deviations_found": 0,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [],
          "equipment_found": [],
          "extraction_method": "text"
        },
        "status": "extracted"
      },
      {
        "filename": "Maintenance_Log_EQP_GRAN_01.csv",
        "document_type_code": "MAINT",
        "batch_id": null,
        "product_name": null,
        "plant": null,
        "manufacturing_date": null,
        "parameters": [],
        "lims_results": [],
        "equipment_readings": [],
        "maintenance_records": [
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-01-08",
            "maintenance_type": "Preventive",
            "performed_by": "ENG-Ravi Kumar",
            "duration_hours": "4.0",
            "observation": "All components inspected. Inlet filter replaced. Impeller blades checked \u2014 no wear. Temperature sensor (thermocouple Type K) tested \u2014 reading within \u00b10.5\u00b0C of reference. Spray nozzles cleaned.",
            "action_taken": "Filter replaced. Thermocouple verified. All lubrication points serviced. Equipment returned to service.",
            "next_pm_due": "2024-04-08",
            "work_order_id": "WO-2024-0041",
            "sign_off_by": "K. Reddy (QA)",
            "status": "Closed"
          },
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-04-08",
            "maintenance_type": "Preventive",
            "performed_by": "ENG-Suresh Rao",
            "duration_hours": "4.5",
            "observation": "Thermocouple connector showing early signs of corrosion/oxidation on pin contacts \u2014 minor discolouration noted. Reading still within calibration tolerance (\u00b10.8\u00b0C of reference). Heating element resistance checked \u2014 within spec. Impeller bearings greased. Filter bags inspected \u2014 one small tear noted in bag #3.",
            "action_taken": "Thermocouple connector cleaned with contact cleaner. Bag #3 replaced. Lubrication completed. NOTE: Thermocouple connector oxidation flagged as a watch item \u2014 recommend replacement at next PM if oxidation worsens. Defer full thermocouple replacement to next PM (Jul 2024).",
            "next_pm_due": "2024-07-08",
            "work_order_id": "WO-2024-0188",
            "sign_off_by": "K. Reddy (QA)",
            "status": "Closed \u2014 with observation flag"
          },
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-07-15",
            "maintenance_type": "Preventive",
            "performed_by": "ENG-Ravi Kumar",
            "duration_hours": "5.0",
            "observation": "THERMOCOUPLE CONNECTOR OXIDATION WORSENED since Apr 2024 PM. Pin contacts showing significant green oxidation. Temperature variance vs reference: +1.4\u00b0C \u2014 now outside \u00b11\u00b0C acceptable tolerance. Risk of further drift identified. Heating element output tested \u2014 showing 5% higher output than nominal at same PID setpoint. PID controller calibration checked \u2014 within spec. Spray nozzle assembly inspected and cleaned.",
            "action_taken": "Thermocouple connector re-cleaned. Temporary fix applied \u2014 thermal contact grease to reduce oxidation impact. IMPORTANT: Full thermocouple assembly replacement recommended URGENTLY. Raised as action item in maintenance log. Engineering Supervisor notified. Part requisition for replacement thermocouple (Pt100 Type K) submitted as PR-2024-0891. NOTE: Due to parts procurement delay expected replacement at next PM (Oct 2024). QA informed of risk.",
            "next_pm_due": "2024-10-15",
            "work_order_id": "WO-2024-0342",
            "sign_off_by": "K. Reddy (QA)",
            "status": "Closed \u2014 URGENT action deferred to Oct 2024 PM"
          },
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-10-10",
            "maintenance_type": "Calibration Due (OVERDUE \u2014 not performed)",
            "performed_by": "N/A",
            "duration_hours": "N/A",
            "observation": "CALIBRATION OVERDUE. Temperature sensor calibration was due on 2024-10-10. No calibration performed on this date. Equipment continued in service. Procurement of replacement thermocouple (PR-2024-0891) still pending \u2014 delivery expected 2024-10-18. Decision made by Engineering Supervisor to continue use until replacement parts arrive and PM is completed on 2024-10-15. QA not formally notified of overdue calibration status.",
            "action_taken": "No action taken on 2024-10-10. Equipment remained in service with overdue calibration status.",
            "next_pm_due": "2024-10-15",
            "work_order_id": "N/A \u2014 Calibration overdue",
            "sign_off_by": "S. Patel (Eng. Supervisor) \u2014 QA not notified",
            "status": "OPEN \u2014 OVERDUE"
          },
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-10-12",
            "maintenance_type": "Breakdown \u2014 Post Deviation Inspection",
            "performed_by": "ENG-Suresh Rao",
            "duration_hours": "3.5",
            "observation": "BREAKDOWN INSPECTION following DEV-2024-0312. Thermocouple connector found severely corroded \u2014 4 of 6 pin contacts had significant oxidation buildup. Thermocouple reading was drifting HIGH by +6.2\u00b0C vs calibrated reference thermometer placed in product bed \u2014 explaining the PID controller receiving incorrect low temperature signal and continuing to drive heating element. Heating element itself tested \u2014 functioning normally. PID controller output was correct based on (erroneous) sensor input. Root finding: Faulty thermocouple = inaccurate sensor data = PID drove heater beyond actual process temperature = product bed temperature exceeded 78\u00b0C undetected until operator manual check.",
            "action_taken": "Thermocouple assembly replaced with new unit (PR-2024-0891 parts received emergency same-day from local vendor). New thermocouple installed and verified against NIST-traceable reference \u2014 reading within \u00b10.2\u00b0C. Heating element verified. PID setpoint re-confirmed. Equipment cleaned and inspected. Equipment NOT returned to service \u2014 awaiting QA review and requalification before next use.",
            "next_pm_due": "N/A \u2014 Requalification required",
            "work_order_id": "WO-2024-0401",
            "sign_off_by": "K. Reddy (QA) + V. Srinivas",
            "status": "OPEN \u2014 Requalification pending"
          },
          {
            "equipment_id": "EQP_GRAN_01",
            "maintenance_date": "2024-10-18",
            "maintenance_type": "Preventive + Requalification",
            "performed_by": "ENG-Ravi Kumar",
            "duration_hours": "6.0",
            "observation": "Full PM performed following DEV-2024-0312 corrective actions. New thermocouple installed and calibrated (calibration certificate CAL-2024-EQP-GRAN01-001 issued). All filter bags replaced. Impeller bearings replaced (reached service life). Spray nozzle assembly replaced. Heating element tested \u2014 output within specification. Temperature PID controller retuned with new sensor. Three qualification runs performed \u2014 all temperature readings within \u00b10.5\u00b0C across inlet/outlet/product bed. Over-temperature hard interlock installed (hardwired cutout at product bed >72\u00b0C) as CAPA action.",
            "action_taken": "All PM tasks completed. Thermocouple calibrated. New interlock installed and tested. Equipment performance qualified. Requalification report REQUALIF-EQP_GRAN_01-2024-001 issued.",
            "next_pm_due": "2025-01-18",
            "work_order_id": "WO-2024-0441",
            "sign_off_by": "K. Reddy (QA) + V. Srinivas",
            "status": "Closed \u2014 Equipment returned to service"
          }
        ],
        "deviation_details": {
          "deviation_id": null,
          "severity": null,
          "description": null,
          "reported_by": null,
          "date_of_occurrence": null,
          "time_of_occurrence": null,
          "immediate_actions": [],
          "equipment_id": null,
          "calibration_status": null,
          "batch_disposition": null,
          "root_cause_preliminary": null,
          "linked_records": null
        },
        "sop_limits": [],
        "metadata": {
          "total_parameters": 0,
          "total_lims_results": 0,
          "total_equipment_readings": 0,
          "total_maintenance_records": 6,
          "deviations_found": 0,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [
            "ENG-Ravi Kumar",
            "ENG-Suresh Rao",
            "S. Patel (Eng. Supervisor)",
            "K. Reddy (QA)",
            "V. Srinivas"
          ],
          "equipment_found": [
            "EQP_GRAN_01"
          ],
          "extraction_method": "text"
        },
        "status": "extracted"
      },
      {
        "filename": "SOP_Process_Granulation_Aurobindo.pdf",
        "document_type_code": "SOP",
        "batch_id": null,
        "product_name": null,
        "plant": "Unit III, Hyderabad",
        "manufacturing_date": null,
        "parameters": [],
        "lims_results": [],
        "equipment_readings": [],
        "maintenance_records": [],
        "deviation_details": null,
        "sop_limits": [
          {
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "parameter_name": "API Weight",
            "lower_limit": "498.0",
            "upper_limit": "502.0",
            "unit": "kg",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 re-weigh, investigate"
          },
          {
            "process_step": "Dispensing",
            "equipment_id": "EQP_DISP_01",
            "parameter_name": "Excipient Weight",
            "lower_limit": "Per BMR",
            "upper_limit": "Per BMR",
            "unit": "kg",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 re-weigh, investigate"
          },
          {
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "parameter_name": "Inlet Air Temp",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "unit": "\u00b0C",
            "criticality": "Critical",
            "action_if_exceeded": "Stop immediately \u2014 raise deviation"
          },
          {
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "parameter_name": "Product Bed Temp",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "unit": "\u00b0C",
            "criticality": "Critical",
            "action_if_exceeded": "Stop immediately \u2014 raise deviation"
          },
          {
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "parameter_name": "Outlet Air Temp",
            "lower_limit": "40.0",
            "upper_limit": "50.0",
            "unit": "\u00b0C",
            "criticality": "Major",
            "action_if_exceeded": "Notify QA \u2014 continue with monitoring"
          },
          {
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "parameter_name": "Impeller Speed",
            "lower_limit": "220",
            "upper_limit": "280",
            "unit": "rpm",
            "criticality": "Major",
            "action_if_exceeded": "Adjust and document"
          },
          {
            "process_step": "Granulation",
            "equipment_id": "EQP_GRAN_01",
            "parameter_name": "Binder Addition Rate",
            "lower_limit": "2.8",
            "upper_limit": "3.5",
            "unit": "kg/min",
            "criticality": "Major",
            "action_if_exceeded": "Adjust and document"
          },
          {
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "parameter_name": "Inlet Air Temp",
            "lower_limit": "60.0",
            "upper_limit": "70.0",
            "unit": "\u00b0C",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 raise deviation"
          },
          {
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "parameter_name": "Product Temperature",
            "lower_limit": "45.0",
            "upper_limit": "60.0",
            "unit": "\u00b0C",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 raise deviation"
          },
          {
            "process_step": "Drying",
            "equipment_id": "EQP_DRYR_01",
            "parameter_name": "LOD (Post-Drying)",
            "lower_limit": "1.0",
            "upper_limit": "2.5",
            "unit": "%",
            "criticality": "Critical",
            "action_if_exceeded": "Reject granules \u2014 investigate"
          },
          {
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "parameter_name": "Main Compression Force",
            "lower_limit": "10.0",
            "upper_limit": "15.0",
            "unit": "kN",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 adjust tooling"
          },
          {
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "parameter_name": "Tablet Hardness",
            "lower_limit": "5.0",
            "upper_limit": "8.0",
            "unit": "kP",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 adjust compression"
          },
          {
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "parameter_name": "Average Tablet Weight",
            "lower_limit": "495.0",
            "upper_limit": "505.0",
            "unit": "mg",
            "criticality": "Critical",
            "action_if_exceeded": "Stop \u2014 check die/punch"
          },
          {
            "process_step": "Compression",
            "equipment_id": "EQP_COMP_01",
            "parameter_name": "Friability",
            "lower_limit": "0.0",
            "upper_limit": "1.0",
            "unit": "%",
            "criticality": "Critical",
            "action_if_exceeded": "Reject \u2014 investigate granule quality"
          }
        ],
        "metadata": {
          "total_parameters": 0,
          "total_lims_results": 0,
          "total_equipment_readings": 0,
          "total_maintenance_records": 0,
          "deviations_found": 0,
          "missing_values": 0,
          "low_confidence_count": 0,
          "operators_found": [],
          "equipment_found": [
            "EQP_DISP_01",
            "EQP_GRAN_01",
            "EQP_DRYR_01",
            "EQP_COMP_01"
          ],
          "extraction_method": "text"
        },
        "status": "extracted"
      }
    ],
    "total_files": 7
  },
  "validate": {
    "batch_id": "BTC0048",
    "product_name": "Paracetamol Tablets 500mg",
    "batch_validation_title": "Batch Validation: BTC0048",
    "description": "Integrity check for automated extraction from 54 lab reports.",
    "total_parameters": 54,
    "total_validation_entries": 54,
    "validation_rows": [
      {
        "source_id": "REF-00001",
        "parameter_name": "Net air temp",
        "target_value": "40-70",
        "found_value": "61.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00002",
        "parameter_name": "Tablet air temp",
        "target_value": "40-60",
        "found_value": "42.5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00003",
        "parameter_name": "Raw material weight",
        "target_value": "5-6",
        "found_value": "5.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00004",
        "parameter_name": "Raw material weight",
        "target_value": "24-26",
        "found_value": "24.9",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00005",
        "parameter_name": "Product Bed Temp",
        "target_value": "60.0-70.0 \u00b0C",
        "found_value": "63.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00006",
        "parameter_name": "Raw Material Weight - Paracetamol API",
        "target_value": "498-502",
        "found_value": "500.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00007",
        "parameter_name": "Raw Material Weight - MCC PH102",
        "target_value": "88-92",
        "found_value": "89.8",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00008",
        "parameter_name": "Raw Material Weight - Starch (Maize)",
        "target_value": "24-26",
        "found_value": "24.9",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00009",
        "parameter_name": "Raw Material Weight - Magnesium Stearate",
        "target_value": "4.8-5.2",
        "found_value": "5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00010",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "61.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00011",
        "parameter_name": "Outlet Air Temperature",
        "target_value": "40-50",
        "found_value": "42.5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00012",
        "parameter_name": "Product Bed Temperature",
        "target_value": "60-70",
        "found_value": "63.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00013",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "68.4",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00014",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "74.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": "Value exceeds upper limit",
        "tab": "parameters"
      },
      {
        "source_id": "REF-00015",
        "parameter_name": "Product Bed Temperature",
        "target_value": "60-70",
        "found_value": "78.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": "Value exceeds upper limit",
        "tab": "parameters"
      },
      {
        "source_id": "REF-00016",
        "parameter_name": "Binder Solution Addition Rate",
        "target_value": "2.8-3.5",
        "found_value": "3.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00017",
        "parameter_name": "Impeller Speed",
        "target_value": "220-280 rpm",
        "found_value": "250",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00018",
        "parameter_name": "Loss on Drying (LOD) \u2014 IPC",
        "target_value": "1.5-3",
        "found_value": "2.3",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00019",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "65",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00020",
        "parameter_name": "Product Temperature",
        "target_value": "45.0-60.0 \u00b0C",
        "found_value": "52.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00021",
        "parameter_name": "Exhaust Air Temperature",
        "target_value": "35-45",
        "found_value": "38.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00022",
        "parameter_name": "LOD \u2014 Post Drying",
        "target_value": "1-2.5",
        "found_value": "1.8",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00023",
        "parameter_name": "Main Compression Force",
        "target_value": "10.0-15.0 kN",
        "found_value": "12.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00024",
        "parameter_name": "Pre-Compression Force",
        "target_value": "1.5-3.5",
        "found_value": "2.4",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "LIMS-00001",
        "parameter_name": "Assay (HPLC)",
        "target_value": "98.0-102.0 % LC",
        "found_value": "95.4 % LC",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": "OOS \u2014 Result outside specification",
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00002",
        "parameter_name": "Assay (HPLC) \u2014 Re-test",
        "target_value": "98.0-102.0 % LC",
        "found_value": "95.8 % LC",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": "OOS \u2014 Result outside specification",
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00003",
        "parameter_name": "Dissolution (30 min Q)",
        "target_value": "80.0-None % Released",
        "found_value": "82.4 % Released",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00004",
        "parameter_name": "Dissolution (45 min)",
        "target_value": "80.0-None % Released",
        "found_value": "94.2 % Released",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00005",
        "parameter_name": "Tablet Hardness",
        "target_value": "5.0-8.0 kP",
        "found_value": "6.4 kP",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00006",
        "parameter_name": "Friability",
        "target_value": "0.0-1.0 %",
        "found_value": "0.38 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00007",
        "parameter_name": "Average Tablet Weight",
        "target_value": "495.0-505.0 mg",
        "found_value": "501.2 mg",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00008",
        "parameter_name": "Disintegration Time",
        "target_value": "0.0-10.0 min",
        "found_value": "5.8 min",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00009",
        "parameter_name": "Loss on Drying (Post-Drying)",
        "target_value": "1.0-2.5 %",
        "found_value": "1.9 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00010",
        "parameter_name": "Related Substances (HPLC)",
        "target_value": "0.0-0.5 %",
        "found_value": "0.08 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00011",
        "parameter_name": "Identification (IR)",
        "target_value": "None",
        "found_value": "Complies None",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00012",
        "parameter_name": "Microbial Limit \u2014 TAMC",
        "target_value": "0-100 CFU/g",
        "found_value": "45 CFU/g",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00013",
        "parameter_name": "Microbial Limit \u2014 TYMC",
        "target_value": "0-10 CFU/g",
        "found_value": "8 CFU/g",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00014",
        "parameter_name": "Uniformity of Dosage Units (CV%)",
        "target_value": "0.0-6.0 %",
        "found_value": "2.1 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00015",
        "parameter_name": "Water Activity (Aw)",
        "target_value": "0.0-0.60 Aw",
        "found_value": "0.42 Aw",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:00-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "74.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:00-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "70.4",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:15-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "76.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:15-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "78.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:20-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "76.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:20-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "79.1",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "REF-CAL-001",
        "parameter_name": "Calibration Status \u2014 EQP_GRAN_01",
        "target_value": "Current (\u22646 months)",
        "found_value": "OVERDUE",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "Maintenance_Log_EQP_GRAN_01.csv",
        "issue_reason": "Calibration overdue \u2014 equipment may give inaccurate readings",
        "tab": "equipment"
      },
      {
        "source_id": "OP-001",
        "parameter_name": "Operator ID ENG-002 in Equipment Log",
        "target_value": "Present in BMR",
        "found_value": "Missing from BMR rows",
        "validation_status": "Needs Review",
        "confidence": 98,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": "ENG-002 found in Equipment Log but not recorded in BMR rows",
        "tab": "operators"
      },
      {
        "source_id": "OP-002",
        "parameter_name": "Operator ID OPR-014 in Equipment Log",
        "target_value": "Present in BMR",
        "found_value": "Missing from BMR rows",
        "validation_status": "Needs Review",
        "confidence": 98,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": "OPR-014 found in Equipment Log but not recorded in BMR rows",
        "tab": "operators"
      },
      {
        "source_id": "DOC-001",
        "parameter_name": "Batch Record BTC0048",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 98,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-002",
        "parameter_name": "LIMS Results BTC0048",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-003",
        "parameter_name": "Equipment Log EQP_GRAN_01",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-004",
        "parameter_name": "Maintenance Log EQP_GRAN_01",
        "target_value": "Calibration Current",
        "found_value": "OVERDUE",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "Maintenance_Log_EQP_GRAN_01.csv",
        "issue_reason": "Calibration overdue",
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-005",
        "parameter_name": "SOP Process Granulation",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 95,
        "source_file": "SOP_Process_Granulation.pdf",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-006",
        "parameter_name": "Deviation Report DEV-2024-0312",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "Deviation_DEV20240312.json",
        "issue_reason": null,
        "tab": "source_documents"
      }
    ],
    "parameters": [
      {
        "source_id": "REF-00001",
        "parameter_name": "Net air temp",
        "target_value": "40-70",
        "found_value": "61.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00002",
        "parameter_name": "Tablet air temp",
        "target_value": "40-60",
        "found_value": "42.5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00003",
        "parameter_name": "Raw material weight",
        "target_value": "5-6",
        "found_value": "5.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00004",
        "parameter_name": "Raw material weight",
        "target_value": "24-26",
        "found_value": "24.9",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00005",
        "parameter_name": "Product Bed Temp",
        "target_value": "60.0-70.0 \u00b0C",
        "found_value": "63.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00006",
        "parameter_name": "Raw Material Weight - Paracetamol API",
        "target_value": "498-502",
        "found_value": "500.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00007",
        "parameter_name": "Raw Material Weight - MCC PH102",
        "target_value": "88-92",
        "found_value": "89.8",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00008",
        "parameter_name": "Raw Material Weight - Starch (Maize)",
        "target_value": "24-26",
        "found_value": "24.9",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00009",
        "parameter_name": "Raw Material Weight - Magnesium Stearate",
        "target_value": "4.8-5.2",
        "found_value": "5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00010",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "61.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00011",
        "parameter_name": "Outlet Air Temperature",
        "target_value": "40-50",
        "found_value": "42.5",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00012",
        "parameter_name": "Product Bed Temperature",
        "target_value": "60-70",
        "found_value": "63.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00013",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "68.4",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00014",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "74.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": "Value exceeds upper limit",
        "tab": "parameters"
      },
      {
        "source_id": "REF-00015",
        "parameter_name": "Product Bed Temperature",
        "target_value": "60-70",
        "found_value": "78.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": "Value exceeds upper limit",
        "tab": "parameters"
      },
      {
        "source_id": "REF-00016",
        "parameter_name": "Binder Solution Addition Rate",
        "target_value": "2.8-3.5",
        "found_value": "3.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00017",
        "parameter_name": "Impeller Speed",
        "target_value": "220-280 rpm",
        "found_value": "250",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00018",
        "parameter_name": "Loss on Drying (LOD) \u2014 IPC",
        "target_value": "1.5-3",
        "found_value": "2.3",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00019",
        "parameter_name": "Inlet Air Temperature",
        "target_value": "60-70",
        "found_value": "65",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00020",
        "parameter_name": "Product Temperature",
        "target_value": "45.0-60.0 \u00b0C",
        "found_value": "52.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00021",
        "parameter_name": "Exhaust Air Temperature",
        "target_value": "35-45",
        "found_value": "38.2",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00022",
        "parameter_name": "LOD \u2014 Post Drying",
        "target_value": "1-2.5",
        "found_value": "1.8",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00023",
        "parameter_name": "Main Compression Force",
        "target_value": "10.0-15.0 kN",
        "found_value": "12.1",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      },
      {
        "source_id": "REF-00024",
        "parameter_name": "Pre-Compression Force",
        "target_value": "1.5-3.5",
        "found_value": "2.4",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "parameters"
      }
    ],
    "specifications": [
      {
        "source_id": "LIMS-00001",
        "parameter_name": "Assay (HPLC)",
        "target_value": "98.0-102.0 % LC",
        "found_value": "95.4 % LC",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": "OOS \u2014 Result outside specification",
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00002",
        "parameter_name": "Assay (HPLC) \u2014 Re-test",
        "target_value": "98.0-102.0 % LC",
        "found_value": "95.8 % LC",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": "OOS \u2014 Result outside specification",
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00003",
        "parameter_name": "Dissolution (30 min Q)",
        "target_value": "80.0-None % Released",
        "found_value": "82.4 % Released",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00004",
        "parameter_name": "Dissolution (45 min)",
        "target_value": "80.0-None % Released",
        "found_value": "94.2 % Released",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00005",
        "parameter_name": "Tablet Hardness",
        "target_value": "5.0-8.0 kP",
        "found_value": "6.4 kP",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00006",
        "parameter_name": "Friability",
        "target_value": "0.0-1.0 %",
        "found_value": "0.38 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00007",
        "parameter_name": "Average Tablet Weight",
        "target_value": "495.0-505.0 mg",
        "found_value": "501.2 mg",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00008",
        "parameter_name": "Disintegration Time",
        "target_value": "0.0-10.0 min",
        "found_value": "5.8 min",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00009",
        "parameter_name": "Loss on Drying (Post-Drying)",
        "target_value": "1.0-2.5 %",
        "found_value": "1.9 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00010",
        "parameter_name": "Related Substances (HPLC)",
        "target_value": "0.0-0.5 %",
        "found_value": "0.08 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00011",
        "parameter_name": "Identification (IR)",
        "target_value": "None",
        "found_value": "Complies None",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00012",
        "parameter_name": "Microbial Limit \u2014 TAMC",
        "target_value": "0-100 CFU/g",
        "found_value": "45 CFU/g",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00013",
        "parameter_name": "Microbial Limit \u2014 TYMC",
        "target_value": "0-10 CFU/g",
        "found_value": "8 CFU/g",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00014",
        "parameter_name": "Uniformity of Dosage Units (CV%)",
        "target_value": "0.0-6.0 %",
        "found_value": "2.1 %",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      },
      {
        "source_id": "LIMS-00015",
        "parameter_name": "Water Activity (Aw)",
        "target_value": "0.0-0.60 Aw",
        "found_value": "0.42 Aw",
        "validation_status": "Valid",
        "confidence": 100,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "specifications"
      }
    ],
    "equipment": [
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:00-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "74.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:00-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "70.4",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:15-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "76.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:15-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "78.2",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:20-Inlet_Air_Temperature",
        "parameter_name": "Inlet_Air_Temperature",
        "target_value": "65.0",
        "found_value": "76.8",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "EQ-EQP_GRAN_01-2024-10-12 08:20-Product_Bed_Temperature",
        "parameter_name": "Product_Bed_Temperature",
        "target_value": "65.0",
        "found_value": "79.1",
        "validation_status": "DEVIATION",
        "confidence": 100,
        "source_file": "equipment_readings",
        "issue_reason": "Value exceeded upper limit.",
        "tab": "equipment"
      },
      {
        "source_id": "REF-CAL-001",
        "parameter_name": "Calibration Status \u2014 EQP_GRAN_01",
        "target_value": "Current (\u22646 months)",
        "found_value": "OVERDUE",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "Maintenance_Log_EQP_GRAN_01.csv",
        "issue_reason": "Calibration overdue \u2014 equipment may give inaccurate readings",
        "tab": "equipment"
      }
    ],
    "operators": [
      {
        "source_id": "OP-001",
        "parameter_name": "Operator ID ENG-002 in Equipment Log",
        "target_value": "Present in BMR",
        "found_value": "Missing from BMR rows",
        "validation_status": "Needs Review",
        "confidence": 98,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": "ENG-002 found in Equipment Log but not recorded in BMR rows",
        "tab": "operators"
      },
      {
        "source_id": "OP-002",
        "parameter_name": "Operator ID OPR-014 in Equipment Log",
        "target_value": "Present in BMR",
        "found_value": "Missing from BMR rows",
        "validation_status": "Needs Review",
        "confidence": 98,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": "OPR-014 found in Equipment Log but not recorded in BMR rows",
        "tab": "operators"
      }
    ],
    "source_documents": [
      {
        "source_id": "DOC-001",
        "parameter_name": "Batch Record BTC0048",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 98,
        "source_file": "Batch_Record_BTC0048",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-002",
        "parameter_name": "LIMS Results BTC0048",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "LIMS_Results_BTC0048.csv",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-003",
        "parameter_name": "Equipment Log EQP_GRAN_01",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-004",
        "parameter_name": "Maintenance Log EQP_GRAN_01",
        "target_value": "Calibration Current",
        "found_value": "OVERDUE",
        "validation_status": "Needs Review",
        "confidence": 100,
        "source_file": "Maintenance_Log_EQP_GRAN_01.csv",
        "issue_reason": "Calibration overdue",
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-005",
        "parameter_name": "SOP Process Granulation",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 95,
        "source_file": "SOP_Process_Granulation.pdf",
        "issue_reason": null,
        "tab": "source_documents"
      },
      {
        "source_id": "DOC-006",
        "parameter_name": "Deviation Report DEV-2024-0312",
        "target_value": "Present",
        "found_value": "Verified",
        "validation_status": "Valid",
        "confidence": 99,
        "source_file": "Deviation_DEV20240312.json",
        "issue_reason": null,
        "tab": "source_documents"
      }
    ],
    "tabs": {
      "parameters": {
        "count": 24
      },
      "specifications": {
        "count": 15
      },
      "equipment": {
        "count": 7
      },
      "operators": {
        "count": 2
      },
      "source_documents": {
        "count": 6
      }
    },
    "compliance_score": 91,
    "compliance_label": "Pass",
    "alcoa_checklist": {
      "attributable": "pass",
      "legible": "pass",
      "contemporaneous": "pass",
      "original": "pass",
      "accurate": "pass",
      "complete": "pass",
      "consistent": "pass",
      "enduring": "pass",
      "available": "pass"
    },
    "missing_data_alerts": [
      {
        "type": "specifications",
        "source_id": "LIMS-00001",
        "message": "OOS \u2014 Result outside specification",
        "severity": "critical"
      },
      {
        "type": "specifications",
        "source_id": "LIMS-00002",
        "message": "OOS \u2014 Result outside specification",
        "severity": "critical"
      },
      {
        "type": "equipment",
        "source_id": "REF-CAL-001",
        "message": "Calibration overdue \u2014 equipment may give inaccurate readings",
        "severity": "critical"
      },
      {
        "type": "operators",
        "source_id": "OP-001",
        "message": "ENG-002 found in Equipment Log but not recorded in BMR rows",
        "severity": "warning"
      },
      {
        "type": "operators",
        "source_id": "OP-002",
        "message": "OPR-014 found in Equipment Log but not recorded in BMR rows",
        "severity": "warning"
      },
      {
        "type": "source_documents",
        "source_id": "DOC-004",
        "message": "Calibration overdue",
        "severity": "warning"
      }
    ],
    "ai_mapping_insights": {
      "auto_corrected": [],
      "suggestions": [
        {
          "description": "Equipment calibration overdue",
          "detail": "Calibration overdue \u2014 equipment may give inaccurate readings"
        },
        {
          "description": "Operator ID missing from BMR",
          "detail": "ENG-002 found in Equipment Log but not recorded in BMR rows"
        },
        {
          "description": "Operator ID missing from BMR",
          "detail": "OPR-014 found in Equipment Log but not recorded in BMR rows"
        }
      ],
      "warnings": [
        {
          "description": "DEVIATION: Inlet Air Temperature",
          "detail": "Found value 74.8 is outside specified limits. Value exceeds upper limit"
        },
        {
          "description": "DEVIATION: Product Bed Temperature",
          "detail": "Found value 78.2 is outside specified limits. Value exceeds upper limit"
        },
        {
          "description": "OOS Result: Assay (HPLC)",
          "detail": "Result 95.4 % LC outside spec 98.0-102.0 % LC. OOS investigation required."
        },
        {
          "description": "OOS Result: Assay (HPLC) \u2014 Re-test",
          "detail": "Result 95.8 % LC outside spec 98.0-102.0 % LC. OOS investigation required."
        },
        {
          "description": "DEVIATION: Inlet_Air_Temperature",
          "detail": "Found value 74.8 is outside specified limits. Value exceeded upper limit."
        },
        {
          "description": "DEVIATION: Product_Bed_Temperature",
          "detail": "Found value 70.4 is outside specified limits. Value exceeded upper limit."
        },
        {
          "description": "DEVIATION: Inlet_Air_Temperature",
          "detail": "Found value 76.2 is outside specified limits. Value exceeded upper limit."
        },
        {
          "description": "DEVIATION: Product_Bed_Temperature",
          "detail": "Found value 78.2 is outside specified limits. Value exceeded upper limit."
        },
        {
          "description": "DEVIATION: Inlet_Air_Temperature",
          "detail": "Found value 76.8 is outside specified limits. Value exceeded upper limit."
        },
        {
          "description": "DEVIATION: Product_Bed_Temperature",
          "detail": "Found value 79.1 is outside specified limits. Value exceeded upper limit."
        }
      ]
    },
    "confidence_heatmap": {
      "label": "Confidence Heatmap",
      "data": [
        24,
        15,
        7,
        2,
        6
      ]
    },
    "summary": {
      "valid_count": 40,
      "deviation_count": 8,
      "needs_review_count": 6,
      "missing_count": 0,
      "unmapped_count": 0,
      "low_confidence_count": 0
    },
    "status": "validated"
  },
  "exceptions": {
    "batch_id": "BTC0048",
    "product_name": "Paracetamol Tablets 500mg",
    "summary": {
      "total_exceptions": 2,
      "total_change": "+5%",
      "critical": 2,
      "critical_trend": "Increasing",
      "major": 0,
      "major_trend": "+1",
      "minor": 0,
      "minor_trend": "Stable",
      "regulatory_risks": 1,
      "compliance_gaps": 1,
      "risk_level": "Critical",
      "risk_statement": "Batch BTC0048 has a high risk due to critical temperature deviations."
    },
    "batch_risk": {
      "level": "Critical",
      "label": "Batch BTC0048 Risk",
      "description": "The batch has a high risk impact due to critical temperature deviations in the granulation process."
    },
    "exception_clusters": [
      {
        "cluster_id": "CL001",
        "cluster_name": "Temperature Deviations",
        "severity": "Critical",
        "confidence": 95,
        "linked_signals": 2,
        "integrated_data_systems": [
          "Temperature Monitoring System",
          "Batch Record System"
        ],
        "system_explanation": "Critical temperature deviations detected in the granulation process, exceeding SOP limits."
      }
    ],
    "exceptions": [
      {
        "exception_id": "EX001",
        "type": "Deviation",
        "parameter": "Inlet Air Temperature",
        "equipment_id": "EQP_GRAN_01",
        "actual_value": "74.8",
        "spec_range": "60-70 \u00b0C",
        "severity": "Critical",
        "process_step": "Granulation",
        "operator": "OPR-014",
        "timestamp": "2024-10-12 08:00",
        "source_file": "BatchRecord_2024-10-12.csv",
        "cluster_id": "CL001",
        "notes": "Immediate action required as per SOP.",
        "is_critical_compliance": true,
        "is_gmp_impacting": true
      },
      {
        "exception_id": "EX002",
        "type": "Deviation",
        "parameter": "Product Bed Temperature",
        "equipment_id": "EQP_GRAN_01",
        "actual_value": "78.2",
        "spec_range": "60-70 \u00b0C",
        "severity": "Critical",
        "process_step": "Granulation",
        "operator": "OPR-014",
        "timestamp": "2024-10-12 08:15",
        "source_file": "BatchRecord_2024-10-12.csv",
        "cluster_id": "CL001",
        "notes": "Monitor closely, adjust process parameters.",
        "is_critical_compliance": true,
        "is_gmp_impacting": true
      }
    ],
    "most_affected_equipment": [
      {
        "equipment_id": "EQP_GRAN_01",
        "equipment_name": "Granulator",
        "exception_count": 2
      }
    ],
    "most_affected_process_step": {
      "step_name": "Granulation",
      "percentage": 100,
      "description": "All exceptions occurred during the granulation process, indicating a critical control point."
    },
    "recommended_next_action": "Conduct a root cause analysis for the temperature deviations and implement corrective actions.",
    "system_recommendation": "Review and update SOPs to prevent future occurrences of similar deviations.",
    "status": "completed"
  },
  "rca": {
    "investigation_summary": {
      "summary": "The investigation identified a deviation in the Inlet Air Temperature and Product Bed Temperature during the granulation process, which exceeded the upper limit. This deviation is likely the root cause of the exception cluster.",
      "key_signals": [
        "Inlet Air Temperature deviation",
        "Product Bed Temperature deviation"
      ],
      "hypothesis": "The deviation in temperature parameters during granulation led to the exception cluster.",
      "supporting_evidence_refs": [
        "AUROBINDO PHARMA LTD. - BATCH MANUFACTURING RECORD  Batch BTC0048  Paracetamol Tablets 500mg.pdf",
        "Equipment_Logs_EQP_GRAN_01.csv",
        "Maintenance_Log_EQP_GRAN_01.csv",
        "LIMS_Results_BTC0048.csv",
        "Deviation_DEV20240312.json"
      ],
      "risk_level": "Critical"
    },
    "analysis_metadata": {
      "data_sources_count": 7,
      "analysis_duration_sec": 3.5,
      "method": "Bayesian correlation"
    },
    "cluster_context": {
      "cluster_id": "CLUSTER_001",
      "cluster_name": "Temperature Deviation Cluster",
      "identified_via": "AI pattern matching",
      "active_signals": [
        {
          "signal": "Inlet Air Temperature",
          "value": "74.8",
          "type": "temperature"
        },
        {
          "signal": "Product Bed Temperature",
          "value": "78.2",
          "type": "temperature"
        }
      ],
      "vertical_timeline": [
        {
          "timestamp": "2024-10-12 08:00",
          "event": "Inlet Air Temperature deviation",
          "severity": "critical",
          "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
          "operator_id": "OPR-014"
        },
        {
          "timestamp": "2024-10-12 08:15",
          "event": "Product Bed Temperature deviation",
          "severity": "critical",
          "source_file": "Equipment_Logs_EQP_GRAN_01.csv",
          "operator_id": "OPR-014"
        }
      ]
    },
    "root_cause_candidates": [
      {
        "rank": 1,
        "title": "Inlet Air Temperature Deviation",
        "probability": 85,
        "description": "The Inlet Air Temperature exceeded the upper limit during granulation, causing a deviation.",
        "evidence_refs": [
          "file_2024-10-12_08:00"
        ],
        "linked_oos_refs": [],
        "suggested_immediate_actions": [
          "Inspect and calibrate temperature control systems",
          "Review granulation process parameters"
        ],
        "is_recommended": true
      },
      {
        "rank": 2,
        "title": "Product Bed Temperature Deviation",
        "probability": 75,
        "description": "The Product Bed Temperature exceeded the upper limit during granulation, contributing to the deviation.",
        "evidence_refs": [
          "file_2024-10-12_08:15"
        ],
        "linked_oos_refs": [],
        "suggested_immediate_actions": [
          "Adjust product bed temperature settings",
          "Monitor temperature trends closely"
        ],
        "is_recommended": false
      }
    ],
    "five_whys": [
      {
        "level": "Y1",
        "question": "Why did the exception occur?",
        "answer": "Inlet Air Temperature exceeded the upper limit.",
        "evidence_source": "file_2024-10-12_08:00",
        "is_root": false
      },
      {
        "level": "Y2",
        "question": "Why did the Inlet Air Temperature exceed the limit?",
        "answer": "Temperature control system malfunctioned.",
        "evidence_source": null,
        "is_root": false
      },
      {
        "level": "Y3",
        "question": "Why did the temperature control system malfunction?",
        "answer": "Calibration was not performed as scheduled.",
        "evidence_source": null,
        "is_root": false
      },
      {
        "level": "Y4",
        "question": "Why was calibration not performed?",
        "answer": "Maintenance schedule was overlooked.",
        "evidence_source": null,
        "is_root": false
      },
      {
        "level": "Y5",
        "question": "Why was the maintenance schedule overlooked?",
        "answer": "Lack of oversight in maintenance planning.",
        "evidence_source": null,
        "is_root": true
      }
    ],
    "fishbone_6m": {
      "machine": [
        "Temperature control system malfunction"
      ],
      "man": [
        "Maintenance oversight"
      ],
      "method": [
        "Inadequate calibration schedule"
      ],
      "material": [],
      "measurement": [
        "Temperature readings exceeded limits"
      ],
      "environment": []
    },
    "supporting_evidence": [
      {
        "filename": "Equipment_Logs_EQP_GRAN_01.csv",
        "reference": "Inlet Air Temperature deviation",
        "detail": "Inlet Air Temperature recorded at 74.8\u00b0C, exceeding the upper limit.",
        "timestamp": "2024-10-12 08:00",
        "operator_id": "OPR-014"
      },
      {
        "filename": "Equipment_Logs_EQP_GRAN_01.csv",
        "reference": "Product Bed Temperature deviation",
        "detail": "Product Bed Temperature recorded at 78.2\u00b0C, exceeding the upper limit.",
        "timestamp": "2024-10-12 08:15",
        "operator_id": "OPR-014"
      },
      {
        "filename": "Maintenance_Log_EQP_GRAN_01.csv",
        "reference": "WO-2024-0342",
        "detail": "THERMOCOUPLE CONNECTOR OXIDATION WORSENED since Apr 2024 PM. Pin contacts showing significant green oxidation. Temperature variance vs reference: +1.4\u00b0C \u2014 now outside \u00b11\u00b0C acceptable tolerance. Risk of further drift identified. Heating element output tested \u2014 showing 5% higher output than nominal at same PID setpoint. PID controller calibration checked \u2014 within spec. Spray nozzle assembly inspected and cleaned.",
        "timestamp": "2024-07-15",
        "operator_id": "ENG-Ravi Kumar"
      },
      {
        "filename": "Maintenance_Log_EQP_GRAN_01.csv",
        "reference": "N/A \u2014 Calibration overdue",
        "detail": "CALIBRATION OVERDUE. Temperature sensor calibration was due on 2024-10-10. No calibration performed on this date. Equipment continued in service. Procurement of replacement thermocouple (PR-2024-0891) still pending \u2014 delivery expected 2024-10-18. Decision made by Engineering Supervisor to continue use until replacement parts arrive and PM is completed on 2024-10-15. QA not formally notified of overdue calibration status.",
        "timestamp": "2024-10-10",
        "operator_id": "N/A"
      }
    ],
    "historical_recurrence": {
      "seen_count": 1,
      "period": "Last 12 months",
      "previous_batches": [],
      "pattern_note": "No previous occurrences in the last 12 months."
    },
    "trip_score": {
      "score": 0.75,
      "reliability": "High"
    },
    "human_confirmation": {
      "confirmed": false,
      "confirmed_by": null,
      "confirmed_at": null,
      "cause_id": null,
      "role": null
    },
    "approval_status": "Pending Investigator & QA Review",
    "qa_action_required": true,
    "status": "completed"
  },
  "capa": {
    "deviation_id": "DEV-2024-0312",
    "batch_id": "BTC0048",
    "product_name": "Paracetamol Tablets 500mg",
    "plant": "Unit-III Hyderabad",
    "severity": "Critical",
    "approved_root_cause": {
      "summary": "Deviation in Product Bed Temperature and Inlet Air Temperature during Granulation process.",
      "approved_by": "QA Head",
      "evidence_coverage": "Temperature logs and equipment calibration records.",
      "linked_cluster": "Temperature Control Issues"
    },
    "capa_actions": [
      {
        "capa_id": "CP-9901",
        "action": "Calibrate temperature sensors and verify equipment settings.",
        "type": "Corrective",
        "owner": "Engineering Lead",
        "due_date": "2024-11-01",
        "verification_method": "Calibration records and temperature logs review.",
        "status": "Completed"
      },
      {
        "capa_id": "CP-9902",
        "action": "Implement a preventive maintenance schedule for temperature control equipment.",
        "type": "Preventive",
        "owner": "Maintenance Supervisor",
        "due_date": "2024-11-15",
        "verification_method": "Maintenance logs and schedule adherence.",
        "status": "In Progress"
      },
      {
        "capa_id": "CP-9903",
        "action": "Conduct a follow-up audit to ensure compliance with temperature control procedures.",
        "type": "Effectiveness",
        "owner": "QA Manager",
        "due_date": "2024-12-01",
        "verification_method": "Audit report and compliance checklist.",
        "status": "Not Started"
      }
    ],
    "impact_assessment": {
      "pre_capa_risk": "Critical",
      "residual_risk": "Low",
      "affected_batches": [
        "BTC0048"
      ],
      "total_product_units": "50000"
    },
    "effectiveness_tracking": {
      "methodology": "Temperature monitoring and audit compliance checks.",
      "monitoring_start": "2024-10-15",
      "monitoring_end": "2025-01-15",
      "recurrence_rate": {
        "value": "0%",
        "target": "< 5%"
      },
      "actions_closed": {
        "value": "1/3",
        "note": "By due date"
      },
      "audit_findings": {
        "value": 0,
        "note": "Post-CAPA"
      },
      "verification_due": {
        "value": "30d",
        "note": "Remaining"
      }
    },
    "action_verification_status": [
      {
        "capa_id": "CP-9901",
        "action": "Calibrate temperature sensors and verify equipment settings.",
        "status": "Verified",
        "progress": 100
      },
      {
        "capa_id": "CP-9902",
        "action": "Implement a preventive maintenance schedule for temperature control equipment.",
        "status": "In Progress",
        "progress": 60
      },
      {
        "capa_id": "CP-9903",
        "action": "Conduct a follow-up audit to ensure compliance with temperature control procedures.",
        "status": "Not Started",
        "progress": 0
      }
    ],
    "pre_closure_checklist": {
      "root_cause_verified_by_qa": true,
      "no_recurrence_in_monitoring_period": true,
      "equipment_re_qualified": true,
      "all_corrective_actions_closed": false,
      "regulatory_submission_ready": false,
      "training_records_updated": false
    },
    "plan_approval": {
      "status": "Pending",
      "approved_by": null,
      "approved_at": null,
      "send_for_execution": false
    },
    "status": "completed"
  },
  "report": {
    "report_metadata": {
      "ref_id": "DEV-2024-0312",
      "revision": "Rev 01",
      "status": "Audit Ready",
      "severity": "Critical",
      "generated_date": "2024-10-13",
      "batch_id": "BTC0048",
      "product_name": "Paracetamol Tablets 500mg",
      "plant": "Unit-III Hyderabad",
      "confidential": true
    },
    "ai_generated_summary": "The investigation report for batch BTC0048 of Paracetamol Tablets 500mg at Unit-III Hyderabad highlights a deviation in the granulation process. The Inlet Air Temperature exceeded the upper limit of 70\u00b0C, reaching 74.8\u00b0C on 2024-10-12 at 08:00, as recorded on equipment EQP_GRAN_01. LIMS results indicate a failure in the assay with a result of 95%, below the specification of 98%-102%, leading to an OOS reference. The batch disposition is currently on HOLD.",
    "approval_workflow": {
      "qa_reviewer": {
        "name": "John Doe",
        "status": "Pending",
        "note": null
      },
      "qa_head": {
        "name": "Jane Smith",
        "status": "Pending Final Sign Off"
      }
    },
    "compliance_tags": [
      "Deviation",
      "OOS",
      "Temperature Control"
    ],
    "sections": {
      "incident_overview": {
        "batch_number": "BTC0048",
        "incident_date": "2024-10-12",
        "deviation_type": "Temperature Deviation",
        "department": "Granulation"
      },
      "detected_deviations": [
        {
          "signal_exception": "Inlet Air Temperature",
          "duration": "1 hour",
          "peak_value": "74.8\u00b0C",
          "limit": "70\u00b0C",
          "is_deviation": true
        }
      ],
      "executive_summary": "Batch BTC0048 of Paracetamol Tablets 500mg at Unit-III Hyderabad experienced a deviation in the granulation process on 2024-10-12. The Inlet Air Temperature on equipment EQP_GRAN_01 exceeded the upper limit of 70\u00b0C, reaching 74.8\u00b0C. LIMS results showed an assay failure with a result of 95%, below the specification of 98%-102%, leading to an OOS reference. The batch disposition is currently on HOLD.",
      "deviation_description": "The first deviation was recorded on 2024-10-12 at 08:00 with the Inlet Air Temperature reaching 74.8\u00b0C on equipment EQP_GRAN_01. The operator ID: OPR-014. The temperature progressively rose, with a peak value of 78.2\u00b0C recorded at 08:15. Immediate actions included stopping the process and notifying the maintenance team as per the Deviation Report.",
      "timeline": [
        {
          "timestamp": "2024-10-12 08:00",
          "event": "Inlet Air Temperature exceeded limit",
          "severity": "critical"
        },
        {
          "timestamp": "2024-10-12 08:15",
          "event": "Product Bed Temperature exceeded limit",
          "severity": "critical"
        },
        {
          "timestamp": "2024-10-12 08:30",
          "event": "Process stopped",
          "severity": "info"
        }
      ],
      "scope_of_review": "The review focused on the granulation process parameters, equipment performance, and LIMS results for batch BTC0048.",
      "exceptions_summary": "The primary exception was the Inlet Air Temperature exceeding the upper limit, leading to a deviation in the granulation process.",
      "root_cause_analysis": {
        "probable_cause": "The probable cause was identified as a calibration issue with equipment EQP_GRAN_01. The calibration was overdue by 15 days, and a thermocouple drift of +6.2\u00b0C was noted in the Maintenance Log under work order ID WO-2024-0401.",
        "methodology": "The root cause analysis involved reviewing equipment logs, maintenance records, and calibration schedules.",
        "conclusion": "The root cause was determined to be an overdue calibration and thermocouple drift on equipment EQP_GRAN_01. Maintenance Log dated 2024-10-10 confirmed the overdue status and drift value. Equipment Log notes at Alert rows indicated temperature anomalies."
      },
      "capa_summary": "CAPA actions included recalibration of EQP_GRAN_01 under work order ID WO-2024-0401, replacement of the thermocouple, and requalification of the equipment. A requalification report was generated post-maintenance.",
      "impact_assessment": "LIMS results indicate the product was impacted. The assay result of 95% is below the specification of 98%-102%, leading to an OOS reference. The batch disposition is currently on HOLD.",
      "conclusion": "The current batch status is on HOLD as per the Deviation Report. An OOS investigation is referenced due to the LIMS failure. Equipment EQP_GRAN_01 has been recalibrated and returned to service.",
      "regulatory_compliance": [
        {
          "standard": "21 CFR Part 211",
          "status": "Under Review"
        }
      ]
    },
    "compliance_checklist": [
      {
        "standard": "21 CFR Part 211",
        "description": "Current Good Manufacturing Practice for Finished Pharmaceuticals",
        "status": "warn"
      }
    ],
    "evidence_coverage_score": 85,
    "confidence_label": "High Confidence",
    "ai_insight": "The deviation was primarily due to equipment calibration issues, which have been addressed through CAPA actions. Continuous monitoring and timely calibration are recommended to prevent recurrence.",
    "export_options": [
      "Export as PDF",
      "Export as Word",
      "Submit to Regulatory"
    ],
    "pdf_filename": "Investigation_Report_BTC0048_20260512_141925.pdf",
    "download_url": "http://192.168.12.40:1110/reports/download/Investigation_Report_BTC0048_20260512_141925.pdf",
    "status": "completed"
  },
  "chat_id": "a9a0137a-4a44-4ae1-b804-d07a0c35a269",
  "flat": {
    "batch_id": "BTC0048",
    "product_name": "Paracetamol Tablets 500mg",
    "plant": "Unit-III Hyderabad",
    "parameters": [
      {
        "parameter_name": "Net air temp",
        "observed_value": "61.2",
        "lower_limit": "40",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_DISP01",
        "timestamp": "2021-10-8",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Tablet air temp",
        "observed_value": "42.5",
        "lower_limit": "40",
        "upper_limit": "60",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_DISP02",
        "timestamp": "2021-10-7",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw material weight",
        "observed_value": "5.2",
        "lower_limit": "5",
        "upper_limit": "6",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP03",
        "timestamp": "2021-10-9",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw material weight",
        "observed_value": "24.9",
        "lower_limit": "24",
        "upper_limit": "26",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP04",
        "timestamp": "2021-10-10",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Product Bed Temp",
        "observed_value": "63.1",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_DISP02",
        "timestamp": "2021-10-6",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw Material Weight - Paracetamol API",
        "observed_value": "500.2",
        "lower_limit": "498",
        "upper_limit": "502",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "timestamp": "2024-10-12 06:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw Material Weight - MCC PH102",
        "observed_value": "89.8",
        "lower_limit": "88",
        "upper_limit": "92",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "timestamp": "2024-10-12 06:05",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw Material Weight - Starch (Maize)",
        "observed_value": "24.9",
        "lower_limit": "24",
        "upper_limit": "26",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "timestamp": "2024-10-12 06:10",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Raw Material Weight - Magnesium Stearate",
        "observed_value": "5",
        "lower_limit": "4.8",
        "upper_limit": "5.2",
        "unit": "kg",
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "timestamp": "2024-10-12 06:15",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Inlet Air Temperature",
        "observed_value": "61.2",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 07:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Outlet Air Temperature",
        "observed_value": "42.5",
        "lower_limit": "40",
        "upper_limit": "50",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 07:15",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Product Bed Temperature",
        "observed_value": "63.1",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 07:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Inlet Air Temperature",
        "observed_value": "68.4",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 07:45",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Inlet Air Temperature",
        "observed_value": "74.8",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 08:00",
        "operator_id": null,
        "status": "DEVIATION",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Product Bed Temperature",
        "observed_value": "78.2",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 08:15",
        "operator_id": null,
        "status": "DEVIATION",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Binder Solution Addition Rate",
        "observed_value": "3.1",
        "lower_limit": "2.8",
        "upper_limit": "3.5",
        "unit": "kg/min",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 08:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Impeller Speed",
        "observed_value": "250",
        "lower_limit": "220",
        "upper_limit": "280",
        "unit": "rpm",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 08:45",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Loss on Drying (LOD) \u2014 IPC",
        "observed_value": "2.3",
        "lower_limit": "1.5",
        "upper_limit": "3",
        "unit": "%",
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "timestamp": "2024-10-12 09:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Inlet Air Temperature",
        "observed_value": "65",
        "lower_limit": "60",
        "upper_limit": "70",
        "unit": "\u00b0C",
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "timestamp": "2024-10-12 09:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Product Temperature",
        "observed_value": "52.1",
        "lower_limit": "45",
        "upper_limit": "60",
        "unit": "\u00b0C",
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "timestamp": "2024-10-12 10:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Exhaust Air Temperature",
        "observed_value": "38.2",
        "lower_limit": "35",
        "upper_limit": "45",
        "unit": "\u00b0C",
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "timestamp": "2024-10-12 10:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "LOD \u2014 Post Drying",
        "observed_value": "1.8",
        "lower_limit": "1",
        "upper_limit": "2.5",
        "unit": "%",
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "timestamp": "2024-10-12 11:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Main Compression Force",
        "observed_value": "12.1",
        "lower_limit": "10",
        "upper_limit": "15",
        "unit": "kN",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 12:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Pre-Compression Force",
        "observed_value": "2.4",
        "lower_limit": "1.5",
        "upper_limit": "3.5",
        "unit": "kN",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 12:15",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Tablet Hardness (IPC)",
        "observed_value": "6.2",
        "lower_limit": "5",
        "upper_limit": "8",
        "unit": "kP",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 12:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Tablet Thickness",
        "observed_value": "3.41",
        "lower_limit": "3.3",
        "upper_limit": "3.6",
        "unit": "mm",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 12:45",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Disintegration Time",
        "observed_value": "5.2",
        "lower_limit": "0",
        "upper_limit": "10",
        "unit": "min",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 13:00",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Average Tablet Weight",
        "observed_value": "501.4",
        "lower_limit": "495",
        "upper_limit": "505",
        "unit": "mg",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 13:15",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      },
      {
        "parameter_name": "Friability",
        "observed_value": "0.42",
        "lower_limit": "0",
        "upper_limit": "1",
        "unit": "%",
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "timestamp": "2024-10-12 13:30",
        "operator_id": null,
        "status": "Normal",
        "notes": null,
        "source_reference": null,
        "confidence": 100
      }
    ],
    "lims_results": [
      {
        "sample_id": "SAMP-BTC0048-001",
        "test_name": "Assay (HPLC)",
        "result_value": "95.4",
        "specification_low": "98.0",
        "specification_high": "102.0",
        "unit": "% LC",
        "status": "Fail",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-003",
        "instrument_id": "INS-HPLC-02",
        "notes": "Result below specification lower limit. OOS investigation initiated. Linked to granulation temperature deviation on 2024-10-12."
      },
      {
        "sample_id": "SAMP-BTC0048-002",
        "test_name": "Assay (HPLC) \u2014 Re-test",
        "result_value": "95.8",
        "specification_low": "98.0",
        "specification_high": "102.0",
        "unit": "% LC",
        "status": "Fail",
        "test_date": "2024-10-15",
        "analyst_id": "QC-ANL-007",
        "instrument_id": "INS-HPLC-01",
        "notes": "Re-test confirms OOS. Different instrument and analyst used. OOS-0048 confirmed."
      },
      {
        "sample_id": "SAMP-BTC0048-003",
        "test_name": "Dissolution (30 min Q)",
        "result_value": "82.4",
        "specification_low": "80.0",
        "specification_high": null,
        "unit": "% Released",
        "status": "Pass",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-003",
        "instrument_id": "INS-DISS-01",
        "notes": "Result meets NLT 80% (Q) specification."
      },
      {
        "sample_id": "SAMP-BTC0048-004",
        "test_name": "Dissolution (45 min)",
        "result_value": "94.2",
        "specification_low": "80.0",
        "specification_high": null,
        "unit": "% Released",
        "status": "Pass",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-003",
        "instrument_id": "INS-DISS-01",
        "notes": "Extended dissolution point \u2014 within acceptable range."
      },
      {
        "sample_id": "SAMP-BTC0048-005",
        "test_name": "Tablet Hardness",
        "result_value": "6.4",
        "specification_low": "5.0",
        "specification_high": "8.0",
        "unit": "kP",
        "status": "Pass",
        "test_date": "2024-10-13",
        "analyst_id": "QC-ANL-005",
        "instrument_id": "INS-HARD-01",
        "notes": "Hardness within specification range."
      },
      {
        "sample_id": "SAMP-BTC0048-006",
        "test_name": "Friability",
        "result_value": "0.38",
        "specification_low": "0.0",
        "specification_high": "1.0",
        "unit": "%",
        "status": "Pass",
        "test_date": "2024-10-13",
        "analyst_id": "QC-ANL-005",
        "instrument_id": "INS-FRIA-01",
        "notes": "Friability within specification."
      },
      {
        "sample_id": "SAMP-BTC0048-007",
        "test_name": "Average Tablet Weight",
        "result_value": "501.2",
        "specification_low": "495.0",
        "specification_high": "505.0",
        "unit": "mg",
        "status": "Pass",
        "test_date": "2024-10-13",
        "analyst_id": "QC-ANL-005",
        "instrument_id": "INS-BAL-02",
        "notes": "Weight uniformity within specification."
      },
      {
        "sample_id": "SAMP-BTC0048-008",
        "test_name": "Disintegration Time",
        "result_value": "5.8",
        "specification_low": "0.0",
        "specification_high": "10.0",
        "unit": "min",
        "status": "Pass",
        "test_date": "2024-10-13",
        "analyst_id": "QC-ANL-005",
        "instrument_id": "INS-DINT-01",
        "notes": "Disintegration within IP specification."
      },
      {
        "sample_id": "SAMP-BTC0048-009",
        "test_name": "Loss on Drying (Post-Drying)",
        "result_value": "1.9",
        "specification_low": "1.0",
        "specification_high": "2.5",
        "unit": "%",
        "status": "Pass",
        "test_date": "2024-10-12",
        "analyst_id": "QC-ANL-002",
        "instrument_id": "INS-KF-01",
        "notes": "Post-drying LOD within specification."
      },
      {
        "sample_id": "SAMP-BTC0048-010",
        "test_name": "Related Substances (HPLC)",
        "result_value": "0.08",
        "specification_low": "0.0",
        "specification_high": "0.5",
        "unit": "%",
        "status": "Pass",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-003",
        "instrument_id": "INS-HPLC-02",
        "notes": "Related substances within ICH limit."
      },
      {
        "sample_id": "SAMP-BTC0048-011",
        "test_name": "Identification (IR)",
        "result_value": "Complies",
        "specification_low": null,
        "specification_high": null,
        "unit": null,
        "status": "Pass",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-004",
        "instrument_id": "INS-IR-01",
        "notes": "Identity confirmed by IR spectroscopy vs reference."
      },
      {
        "sample_id": "SAMP-BTC0048-012",
        "test_name": "Microbial Limit \u2014 TAMC",
        "result_value": "45",
        "specification_low": "0",
        "specification_high": "100",
        "unit": "CFU/g",
        "status": "Pass",
        "test_date": "2024-10-15",
        "analyst_id": "QC-ANL-006",
        "instrument_id": "INS-MIC-01",
        "notes": "TAMC within IP specification of NMT 100 CFU/g."
      },
      {
        "sample_id": "SAMP-BTC0048-013",
        "test_name": "Microbial Limit \u2014 TYMC",
        "result_value": "8",
        "specification_low": "0",
        "specification_high": "10",
        "unit": "CFU/g",
        "status": "Pass",
        "test_date": "2024-10-15",
        "analyst_id": "QC-ANL-006",
        "instrument_id": "INS-MIC-01",
        "notes": "TYMC within IP specification of NMT 10 CFU/g."
      },
      {
        "sample_id": "SAMP-BTC0048-014",
        "test_name": "Uniformity of Dosage Units (CV%)",
        "result_value": "2.1",
        "specification_low": "0.0",
        "specification_high": "6.0",
        "unit": "%",
        "status": "Pass",
        "test_date": "2024-10-14",
        "analyst_id": "QC-ANL-003",
        "instrument_id": "INS-BAL-01",
        "notes": "CV% within AV acceptance criteria per USP <905>."
      },
      {
        "sample_id": "SAMP-BTC0048-015",
        "test_name": "Water Activity (Aw)",
        "result_value": "0.42",
        "specification_low": "0.0",
        "specification_high": "0.60",
        "unit": "Aw",
        "status": "Pass",
        "test_date": "2024-10-12",
        "analyst_id": "QC-ANL-002",
        "instrument_id": "INS-WA-01",
        "notes": "Water activity within limits \u2014 no microbial growth risk."
      }
    ],
    "equipment_readings": [
      {
        "timestamp": "2024-10-12 06:45",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "22.4",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Pre-heat phase. Equipment starting up. Temperature rising to setpoint."
      },
      {
        "timestamp": "2024-10-12 07:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "61.2",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Setpoint reached. Granulation commenced. Materials loaded."
      },
      {
        "timestamp": "2024-10-12 07:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "58.8",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Product bed warming up. Within range."
      },
      {
        "timestamp": "2024-10-12 07:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Motor_Load",
        "value": "42.1",
        "unit": "%",
        "setpoint": "45.0",
        "lower_limit": "30.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Impeller running at 250 rpm. Normal load."
      },
      {
        "timestamp": "2024-10-12 07:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "62.8",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Temperature stable within range."
      },
      {
        "timestamp": "2024-10-12 07:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "61.5",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Product bed temperature stable."
      },
      {
        "timestamp": "2024-10-12 07:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Motor_Load",
        "value": "44.8",
        "unit": "%",
        "setpoint": "45.0",
        "lower_limit": "30.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Load stable. Binder addition commenced."
      },
      {
        "timestamp": "2024-10-12 07:30",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "64.3",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Inlet temperature rising slightly. Normal trend."
      },
      {
        "timestamp": "2024-10-12 07:30",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "63.1",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Product bed within range."
      },
      {
        "timestamp": "2024-10-12 07:45",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "68.4",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Temperature approaching upper limit. Operator notified. Monitoring increased."
      },
      {
        "timestamp": "2024-10-12 07:45",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "65.9",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Product bed within range but trending upward."
      },
      {
        "timestamp": "2024-10-12 07:45",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Motor_Load",
        "value": "47.2",
        "unit": "%",
        "setpoint": "45.0",
        "lower_limit": "30.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Slightly elevated. Acceptable."
      },
      {
        "timestamp": "2024-10-12 08:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "74.8",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "TEMPERATURE EXCEEDED UPPER LIMIT (70\u00b0C). Inlet at 74.8\u00b0C \u2014 4.8\u00b0C above limit. Alarm triggered. Supervisor notified immediately."
      },
      {
        "timestamp": "2024-10-12 08:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "70.4",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "Product bed also at limit. Heating element not responding to setpoint reduction command."
      },
      {
        "timestamp": "2024-10-12 08:00",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Motor_Load",
        "value": "52.8",
        "unit": "%",
        "setpoint": "45.0",
        "lower_limit": "30.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Motor load increased \u2014 possible granule agglomeration due to temperature."
      },
      {
        "timestamp": "2024-10-12 08:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "76.2",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "CRITICAL: Temperature still rising despite setpoint reduction. Thermocouple suspected malfunction. PID controller not responding correctly."
      },
      {
        "timestamp": "2024-10-12 08:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "78.2",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "CRITICAL: Product bed at 78.2\u00b0C \u2014 8.2\u00b0C above upper limit. Process stopped manually at 08:20 hrs by operator on QA instruction."
      },
      {
        "timestamp": "2024-10-12 08:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Motor_Load",
        "value": "58.4",
        "unit": "%",
        "setpoint": "45.0",
        "lower_limit": "30.0",
        "upper_limit": "70.0",
        "status": "Normal",
        "operator_id": "OPR-014",
        "notes": "Motor load elevated due to increased granule viscosity at high temperature."
      },
      {
        "timestamp": "2024-10-12 08:20",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "76.8",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "Process stopped. Air flow maintained to cool product. Do Not Use tag applied."
      },
      {
        "timestamp": "2024-10-12 08:20",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Product_Bed_Temperature",
        "value": "79.1",
        "unit": "\u00b0C",
        "setpoint": "65.0",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "status": "Alert",
        "operator_id": "OPR-014",
        "notes": "Highest recorded product bed temperature. Equipment isolated. Engineering inspection requested."
      },
      {
        "timestamp": "2024-10-12 08:35",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "68.2",
        "unit": "\u00b0C",
        "setpoint": "0.0",
        "lower_limit": "0.0",
        "upper_limit": "0.0",
        "status": "Normal",
        "operator_id": "ENG-002",
        "notes": "Cooling phase. Process stopped. Temperature beginning to fall. Engineering team on-site."
      },
      {
        "timestamp": "2024-10-12 08:50",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "55.1",
        "unit": "\u00b0C",
        "setpoint": "0.0",
        "lower_limit": "0.0",
        "upper_limit": "0.0",
        "status": "Normal",
        "operator_id": "ENG-002",
        "notes": "Cooling. Equipment under engineering inspection."
      },
      {
        "timestamp": "2024-10-12 09:15",
        "equipment_id": "EQP_GRAN_01",
        "parameter": "Inlet_Air_Temperature",
        "value": "32.4",
        "unit": "\u00b0C",
        "setpoint": "0.0",
        "lower_limit": "0.0",
        "upper_limit": "0.0",
        "status": "Normal",
        "operator_id": "ENG-002",
        "notes": "Equipment cooled. Thermocouple removed for inspection. Confirmed: thermocouple connector corroded \u2014 inaccurate high reading being sent to PID controller."
      }
    ],
    "maintenance_records": [
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-01-08",
        "maintenance_type": "Preventive",
        "performed_by": "ENG-Ravi Kumar",
        "duration_hours": "4.0",
        "observation": "All components inspected. Inlet filter replaced. Impeller blades checked \u2014 no wear. Temperature sensor (thermocouple Type K) tested \u2014 reading within \u00b10.5\u00b0C of reference. Spray nozzles cleaned.",
        "action_taken": "Filter replaced. Thermocouple verified. All lubrication points serviced. Equipment returned to service.",
        "next_pm_due": "2024-04-08",
        "work_order_id": "WO-2024-0041",
        "sign_off_by": "K. Reddy (QA)",
        "status": "Closed"
      },
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-04-08",
        "maintenance_type": "Preventive",
        "performed_by": "ENG-Suresh Rao",
        "duration_hours": "4.5",
        "observation": "Thermocouple connector showing early signs of corrosion/oxidation on pin contacts \u2014 minor discolouration noted. Reading still within calibration tolerance (\u00b10.8\u00b0C of reference). Heating element resistance checked \u2014 within spec. Impeller bearings greased. Filter bags inspected \u2014 one small tear noted in bag #3.",
        "action_taken": "Thermocouple connector cleaned with contact cleaner. Bag #3 replaced. Lubrication completed. NOTE: Thermocouple connector oxidation flagged as a watch item \u2014 recommend replacement at next PM if oxidation worsens. Defer full thermocouple replacement to next PM (Jul 2024).",
        "next_pm_due": "2024-07-08",
        "work_order_id": "WO-2024-0188",
        "sign_off_by": "K. Reddy (QA)",
        "status": "Closed \u2014 with observation flag"
      },
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-07-15",
        "maintenance_type": "Preventive",
        "performed_by": "ENG-Ravi Kumar",
        "duration_hours": "5.0",
        "observation": "THERMOCOUPLE CONNECTOR OXIDATION WORSENED since Apr 2024 PM. Pin contacts showing significant green oxidation. Temperature variance vs reference: +1.4\u00b0C \u2014 now outside \u00b11\u00b0C acceptable tolerance. Risk of further drift identified. Heating element output tested \u2014 showing 5% higher output than nominal at same PID setpoint. PID controller calibration checked \u2014 within spec. Spray nozzle assembly inspected and cleaned.",
        "action_taken": "Thermocouple connector re-cleaned. Temporary fix applied \u2014 thermal contact grease to reduce oxidation impact. IMPORTANT: Full thermocouple assembly replacement recommended URGENTLY. Raised as action item in maintenance log. Engineering Supervisor notified. Part requisition for replacement thermocouple (Pt100 Type K) submitted as PR-2024-0891. NOTE: Due to parts procurement delay expected replacement at next PM (Oct 2024). QA informed of risk.",
        "next_pm_due": "2024-10-15",
        "work_order_id": "WO-2024-0342",
        "sign_off_by": "K. Reddy (QA)",
        "status": "Closed \u2014 URGENT action deferred to Oct 2024 PM"
      },
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-10-10",
        "maintenance_type": "Calibration Due (OVERDUE \u2014 not performed)",
        "performed_by": "N/A",
        "duration_hours": "N/A",
        "observation": "CALIBRATION OVERDUE. Temperature sensor calibration was due on 2024-10-10. No calibration performed on this date. Equipment continued in service. Procurement of replacement thermocouple (PR-2024-0891) still pending \u2014 delivery expected 2024-10-18. Decision made by Engineering Supervisor to continue use until replacement parts arrive and PM is completed on 2024-10-15. QA not formally notified of overdue calibration status.",
        "action_taken": "No action taken on 2024-10-10. Equipment remained in service with overdue calibration status.",
        "next_pm_due": "2024-10-15",
        "work_order_id": "N/A \u2014 Calibration overdue",
        "sign_off_by": "S. Patel (Eng. Supervisor) \u2014 QA not notified",
        "status": "OPEN \u2014 OVERDUE"
      },
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-10-12",
        "maintenance_type": "Breakdown \u2014 Post Deviation Inspection",
        "performed_by": "ENG-Suresh Rao",
        "duration_hours": "3.5",
        "observation": "BREAKDOWN INSPECTION following DEV-2024-0312. Thermocouple connector found severely corroded \u2014 4 of 6 pin contacts had significant oxidation buildup. Thermocouple reading was drifting HIGH by +6.2\u00b0C vs calibrated reference thermometer placed in product bed \u2014 explaining the PID controller receiving incorrect low temperature signal and continuing to drive heating element. Heating element itself tested \u2014 functioning normally. PID controller output was correct based on (erroneous) sensor input. Root finding: Faulty thermocouple = inaccurate sensor data = PID drove heater beyond actual process temperature = product bed temperature exceeded 78\u00b0C undetected until operator manual check.",
        "action_taken": "Thermocouple assembly replaced with new unit (PR-2024-0891 parts received emergency same-day from local vendor). New thermocouple installed and verified against NIST-traceable reference \u2014 reading within \u00b10.2\u00b0C. Heating element verified. PID setpoint re-confirmed. Equipment cleaned and inspected. Equipment NOT returned to service \u2014 awaiting QA review and requalification before next use.",
        "next_pm_due": "N/A \u2014 Requalification required",
        "work_order_id": "WO-2024-0401",
        "sign_off_by": "K. Reddy (QA) + V. Srinivas",
        "status": "OPEN \u2014 Requalification pending"
      },
      {
        "equipment_id": "EQP_GRAN_01",
        "maintenance_date": "2024-10-18",
        "maintenance_type": "Preventive + Requalification",
        "performed_by": "ENG-Ravi Kumar",
        "duration_hours": "6.0",
        "observation": "Full PM performed following DEV-2024-0312 corrective actions. New thermocouple installed and calibrated (calibration certificate CAL-2024-EQP-GRAN01-001 issued). All filter bags replaced. Impeller bearings replaced (reached service life). Spray nozzle assembly replaced. Heating element tested \u2014 output within specification. Temperature PID controller retuned with new sensor. Three qualification runs performed \u2014 all temperature readings within \u00b10.5\u00b0C across inlet/outlet/product bed. Over-temperature hard interlock installed (hardwired cutout at product bed >72\u00b0C) as CAPA action.",
        "action_taken": "All PM tasks completed. Thermocouple calibrated. New interlock installed and tested. Equipment performance qualified. Requalification report REQUALIF-EQP_GRAN_01-2024-001 issued.",
        "next_pm_due": "2025-01-18",
        "work_order_id": "WO-2024-0441",
        "sign_off_by": "K. Reddy (QA) + V. Srinivas",
        "status": "Closed \u2014 Equipment returned to service"
      }
    ],
    "sop_limits": [
      {
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "parameter_name": "API Weight",
        "lower_limit": "498.0",
        "upper_limit": "502.0",
        "unit": "kg",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 re-weigh, investigate"
      },
      {
        "process_step": "Dispensing",
        "equipment_id": "EQP_DISP_01",
        "parameter_name": "Excipient Weight",
        "lower_limit": "Per BMR",
        "upper_limit": "Per BMR",
        "unit": "kg",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 re-weigh, investigate"
      },
      {
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "parameter_name": "Inlet Air Temp",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "unit": "\u00b0C",
        "criticality": "Critical",
        "action_if_exceeded": "Stop immediately \u2014 raise deviation"
      },
      {
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "parameter_name": "Product Bed Temp",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "unit": "\u00b0C",
        "criticality": "Critical",
        "action_if_exceeded": "Stop immediately \u2014 raise deviation"
      },
      {
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "parameter_name": "Outlet Air Temp",
        "lower_limit": "40.0",
        "upper_limit": "50.0",
        "unit": "\u00b0C",
        "criticality": "Major",
        "action_if_exceeded": "Notify QA \u2014 continue with monitoring"
      },
      {
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "parameter_name": "Impeller Speed",
        "lower_limit": "220",
        "upper_limit": "280",
        "unit": "rpm",
        "criticality": "Major",
        "action_if_exceeded": "Adjust and document"
      },
      {
        "process_step": "Granulation",
        "equipment_id": "EQP_GRAN_01",
        "parameter_name": "Binder Addition Rate",
        "lower_limit": "2.8",
        "upper_limit": "3.5",
        "unit": "kg/min",
        "criticality": "Major",
        "action_if_exceeded": "Adjust and document"
      },
      {
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "parameter_name": "Inlet Air Temp",
        "lower_limit": "60.0",
        "upper_limit": "70.0",
        "unit": "\u00b0C",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 raise deviation"
      },
      {
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "parameter_name": "Product Temperature",
        "lower_limit": "45.0",
        "upper_limit": "60.0",
        "unit": "\u00b0C",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 raise deviation"
      },
      {
        "process_step": "Drying",
        "equipment_id": "EQP_DRYR_01",
        "parameter_name": "LOD (Post-Drying)",
        "lower_limit": "1.0",
        "upper_limit": "2.5",
        "unit": "%",
        "criticality": "Critical",
        "action_if_exceeded": "Reject granules \u2014 investigate"
      },
      {
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "parameter_name": "Main Compression Force",
        "lower_limit": "10.0",
        "upper_limit": "15.0",
        "unit": "kN",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 adjust tooling"
      },
      {
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "parameter_name": "Tablet Hardness",
        "lower_limit": "5.0",
        "upper_limit": "8.0",
        "unit": "kP",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 adjust compression"
      },
      {
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "parameter_name": "Average Tablet Weight",
        "lower_limit": "495.0",
        "upper_limit": "505.0",
        "unit": "mg",
        "criticality": "Critical",
        "action_if_exceeded": "Stop \u2014 check die/punch"
      },
      {
        "process_step": "Compression",
        "equipment_id": "EQP_COMP_01",
        "parameter_name": "Friability",
        "lower_limit": "0.0",
        "upper_limit": "1.0",
        "unit": "%",
        "criticality": "Critical",
        "action_if_exceeded": "Reject \u2014 investigate granule quality"
      }
    ],
    "deviation_details": {
      "deviation_id": "DEV-2024-0312",
      "severity": "Critical",
      "description": "During wet granulation of batch BTC0048 (Paracetamol Tablets 500mg) on 2024-10-12, the inlet air temperature of fluid bed granulator EQP_GRAN_01 exceeded the validated upper limit of 70\u00b0C at 08:00 hrs. Temperature readings recorded in the batch manufacturing record show a progressive rise from the normal operating range: 61.2\u00b0C (07:00), 63.1\u00b0C (07:30), 68.4\u00b0C (07:45), and 74.8\u00b0C (08:00). The product bed temperature simultaneously rose to 78.2\u00b0C at 08:15 hrs, which is 8.2\u00b0C above the upper specification limit of 70\u00b0C. Granulation was stopped immediately at 08:20 hrs upon detection. A total of approximately 40 minutes of granulation was conducted under temperature exceedance conditions. Equipment EQP_GRAN_01 was taken out of service for investigation.",
      "reported_by": "V. Srinivas, Sr. Production Manager",
      "date_of_occurrence": "2024-10-12",
      "time_of_occurrence": "08:00",
      "immediate_actions": [
        "Granulation process stopped immediately at 08:20 hrs upon temperature exceedance confirmed.",
        "Granules quarantined in-process. Quarantine label DEV-2024-0312-HOLD applied.",
        "Equipment EQP_GRAN_01 taken out of service. Do Not Use tag applied.",
        "QA Manager notified \u2014 K. Reddy informed at 08:25 hrs.",
        "Maintenance team requested to inspect EQP_GRAN_01 temperature sensor and heating element.",
        "Retain samples collected from granules for additional testing.",
        "LIMS order raised for full release testing including assay, dissolution, and related substances."
      ],
      "equipment_id": "EQP_GRAN_01",
      "calibration_status": "OVERDUE \u2014 2 days past due at time of deviation",
      "batch_disposition": "HOLD \u2014 Pending investigation completion and QA Manager review",
      "root_cause_preliminary": "Temperature sensor (thermocouple) malfunction or drift due to overdue calibration and previously noted connector oxidation. Sensor may have been providing inaccurate feedback to the PID controller, causing the heating element to continue heating beyond the setpoint.",
      "linked_records": {
        "OOS_Reference": "OOS-2024-0048",
        "Equipment_Log_Reference": "EQL-EQP_GRAN_01-20241012",
        "Maintenance_Log_Reference": "MNT-EQP_GRAN_01-20240715",
        "BMR_Reference": "BMR-AURO-PARA-500-BTC0048",
        "LIMS_Sample_References": [
          "SAMP-BTC0048-001",
          "SAMP-BTC0048-002"
        ]
      }
    }
  }
}