From 75f6d207c64e9c49d458f5dffef1ee5a3154b0a9 Mon Sep 17 00:00:00 2001 From: "Infineon\\Ouellette" Date: Fri, 10 Jan 2025 14:36:00 -0700 Subject: [PATCH] Finished development on requiring TW Entry on metrology frequency for scan app logging --- LSL2/STPROC/RDS_SERVICES.txt | 4 + LSL2/STPROC/SCAN_SERVICES.txt | 201 ++++++++++++++++++---------------- 2 files changed, 111 insertions(+), 94 deletions(-) diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index 2f8e4c1..96f367c 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -756,6 +756,10 @@ Service IsTWLoggingReqd(RDSNo) end else Response = True$ end + TWTrackingSystemActive = Database_Services('ReadDataColumn', 'APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, True$, 0, False$) + If TWTrackingSystemActive EQ False$ then + Response = False$ + end end service //---------------------------------------------------------------------------------------------------------------------- diff --git a/LSL2/STPROC/SCAN_SERVICES.txt b/LSL2/STPROC/SCAN_SERVICES.txt index d74f480..7be61e3 100644 --- a/LSL2/STPROC/SCAN_SERVICES.txt +++ b/LSL2/STPROC/SCAN_SERVICES.txt @@ -666,6 +666,7 @@ Service ProcessScanData(ScanID, ScanJSON) CassNo = RDSRec CurrStatus = obj_WO_Mat('CurrStatus', WONo:'*':CassNo) + // RDS Format IsEpiPro = RDS_Services('IsEpiPro', CassetteID) If IsEpiPro EQ False$ then @@ -891,64 +892,70 @@ Service ProcessScanData(ScanID, ScanJSON) LSParmsComp = Xlate('RDS', RDSNo, 'LS_PARMS_COMP', 'X') FirstParmsComp = LSParmsComp<1,1> If (FirstParmsComp EQ False$) then RDS_Services('CopyRDSLayerParameters', RDSNo) - // Supplier lot verification - ScannedSuppLot = ScansRow - RDSSuppLot = RDSRec - If (ScannedSuppLot NE '') then - If (ScannedSuppLot _EQC RDSSuppLot) then - WaferCountAckReq = Xlate('RDS', RDSNo, 'WAFER_COUNT_ACK_REQ', 'X') - If WaferCountAckReq EQ False$ then - PreStageReady = '' - LoadStageReady = '' - PreStageReady = QA_Services('PreEpiSignatureReady', RDSNo, Username, WaferQty, Reactor) - If PreStageReady EQ True$ then - LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide, True$, Reactor) - If (LoadStageReady NE True$) then + //Test Wafer logging verification + IsTWLoggingReqd = RDS_Services('IsTWLoggingReqd', RDSNo) + If IsTWLoggingReqd EQ True$ AND TestWaferLotData NE '' then + + // Supplier lot verification + ScannedSuppLot = ScansRow + RDSSuppLot = RDSRec + If (ScannedSuppLot NE '') then + If (ScannedSuppLot _EQC RDSSuppLot) then + WaferCountAckReq = Xlate('RDS', RDSNo, 'WAFER_COUNT_ACK_REQ', 'X') + If WaferCountAckReq EQ False$ then + PreStageReady = '' + LoadStageReady = '' + PreStageReady = QA_Services('PreEpiSignatureReady', RDSNo, Username, WaferQty, Reactor) + If PreStageReady EQ True$ then + LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide, True$, Reactor) + If (LoadStageReady NE True$) then + // Why is it not ready? + ErrorMsg = Error_Services('GetMessage') + Begin Case + Case IndexC(ErrorMsg, 'supplement', 1) + // Clear the error to return a JSON payload and handle the acknowledgements. + Error_Services('Clear') + Scan_Services('AddNotAcceptableReason', ErrorMsg) + Case IndexC(ErrorMsg, 'ROTR', 1) + ROTRBlock = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS$, True$, 0, False$) + ROTRBlockReason = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS_REASON$, True$, 0, False$) + ROTREnabled = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ENABLE_ROTR$, True$, 0, False$) + If ( (ROTRBlock NE 'P') AND (ROTREnabled EQ True$) ) then + // Clear the error to return a JSON payload and allow for OVERRIDE scan. + ScansRow = True$ + ScansRow = ROTRBlockReason + ScansRow = 'ROTR' + Error_Services('Clear') + Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled") + end else + ScansRow = False$ + ScansRow = '' + ScansRow = '' + end + End Case + end + end else // Why is it not ready? ErrorMsg = Error_Services('GetMessage') Begin Case Case IndexC(ErrorMsg, 'supplement', 1) - // Clear the error to return a JSON payload and handle the acknowledgements. Error_Services('Clear') Scan_Services('AddNotAcceptableReason', ErrorMsg) - Case IndexC(ErrorMsg, 'ROTR', 1) - ROTRBlock = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS$, True$, 0, False$) - ROTRBlockReason = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS_REASON$, True$, 0, False$) - ROTREnabled = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ENABLE_ROTR$, True$, 0, False$) - If ( (ROTRBlock NE 'P') AND (ROTREnabled EQ True$) ) then - // Clear the error to return a JSON payload and allow for OVERRIDE scan. - ScansRow = True$ - ScansRow = ROTRBlockReason - ScansRow = 'ROTR' - Error_Services('Clear') - Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled") - end else - ScansRow = False$ - ScansRow = '' - ScansRow = '' - end - End Case + End Case end end else - // Why is it not ready? - ErrorMsg = Error_Services('GetMessage') - Begin Case - Case IndexC(ErrorMsg, 'supplement', 1) - Error_Services('Clear') - Scan_Services('AddNotAcceptableReason', ErrorMsg) - End Case + Scan_Services('AddNotAcceptableReason', 'The cassette wafer count must be verified against the scheduled wafer count to proceed.') end end else - Scan_Services('AddNotAcceptableReason', 'The cassette wafer count must be verified against the scheduled wafer count to proceed.') + ScansRow = '' + Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.') end end else - ScansRow = '' - Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.') + Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.') end end else - Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.') + Scan_Services('AddNotAcceptableReason', 'Test wafers are required to be logged with this run.') end - end else Error_Services('Add', '(':CassetteID:') The first run must be completed using the OpenInsight user interface.') end @@ -957,68 +964,73 @@ Service ProcessScanData(ScanID, ScanJSON) end Case CurrStage _EQC 'LOAD' Action = 'LOAD' - ScannedSuppLot = ScansRow - RDSSuppLot = RDSRec - If (ScannedSuppLot NE '') then - If (ScannedSuppLot _EQC RDSSuppLot) then - // Scheduled tool verification (only supports reactors at the moment) - ClearSelect - SchedTool = Xlate('RDS', RDSNo, 'SCHED_REACTOR', 'X') - ClearSelect - SchedTool = 'R':SchedTool - ScanTool = ScansRow - If SchedTool EQ ScanTool then - // Check if LOAD stage is ready to sign - RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') - If RDSLayerAckReq EQ False$ then - If LWIInstAckReq EQ False$ then - If LoadInstAckReq EQ False$ then - LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide) - If (LoadStageReady NE True$) then - // Why is it not ready? - ErrorMsg = Error_Services('GetMessage') - Begin Case - Case IndexC(ErrorMsg, 'supplement', 1) - // Clear the error to return a JSON payload and handle the acknowledgements. - Error_Services('Clear') - Scan_Services('AddNotAcceptableReason', ErrorMsg) - Case IndexC(ErrorMsg, 'ROTR', 1) - ROTRBlock = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS$, True$, 0, False$) - ROTRBlockReason = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS_REASON$, True$, 0, False$) - ROTREnabled = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ENABLE_ROTR$, True$, 0, False$) - If ( (ROTRBlock NE 'P') AND (ROTREnabled EQ True$) ) then - // Clear the error to return a JSON payload and allow for OVERRIDE scan. - ScansRow = True$ - ScansRow = ROTRBlockReason - ScansRow = 'ROTR' + IsTWLoggingReqd = RDS_Services('IsTWLoggingReqd', RDSNo) + If IsTWLoggingReqd EQ True$ AND TestWaferLotData NE '' then + ScannedSuppLot = ScansRow + RDSSuppLot = RDSRec + If (ScannedSuppLot NE '') then + If (ScannedSuppLot _EQC RDSSuppLot) then + // Scheduled tool verification (only supports reactors at the moment) + ClearSelect + SchedTool = Xlate('RDS', RDSNo, 'SCHED_REACTOR', 'X') + ClearSelect + SchedTool = 'R':SchedTool + ScanTool = ScansRow + If SchedTool EQ ScanTool then + // Check if LOAD stage is ready to sign + RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') + If RDSLayerAckReq EQ False$ then + If LWIInstAckReq EQ False$ then + If LoadInstAckReq EQ False$ then + LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide) + If (LoadStageReady NE True$) then + // Why is it not ready? + ErrorMsg = Error_Services('GetMessage') + Begin Case + Case IndexC(ErrorMsg, 'supplement', 1) + // Clear the error to return a JSON payload and handle the acknowledgements. Error_Services('Clear') - Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled") - end else - ScansRow = False$ - ScansRow = '' - ScansRow = '' - end - End Case + Scan_Services('AddNotAcceptableReason', ErrorMsg) + Case IndexC(ErrorMsg, 'ROTR', 1) + ROTRBlock = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS$, True$, 0, False$) + ROTRBlockReason = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS_REASON$, True$, 0, False$) + ROTREnabled = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ENABLE_ROTR$, True$, 0, False$) + If ( (ROTRBlock NE 'P') AND (ROTREnabled EQ True$) ) then + // Clear the error to return a JSON payload and allow for OVERRIDE scan. + ScansRow = True$ + ScansRow = ROTRBlockReason + ScansRow = 'ROTR' + Error_Services('Clear') + Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled") + end else + ScansRow = False$ + ScansRow = '' + ScansRow = '' + end + End Case + end + end else + Scan_Services('AddNotAcceptableReason', 'The LOAD stage engineering instructions must be acknowledged before the load operation can be signed.') end end else - Scan_Services('AddNotAcceptableReason', 'The LOAD stage engineering instructions must be acknowledged before the load operation can be signed.') - end + Scan_Services('AddNotAcceptableReason', 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.') + end end else - Scan_Services('AddNotAcceptableReason', 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.') - end + ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' + Scan_Services('AddNotAcceptableReason', ErrorMessage) + end end else - ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' - Scan_Services('AddNotAcceptableReason', ErrorMessage) + Error_Services('Add', 'Scanned tool ':ScanTool:' does not match the scheduled tool ':SchedTool:'. (':RDSNo:')') end end else - Error_Services('Add', 'Scanned tool ':ScanTool:' does not match the scheduled tool ':SchedTool:'. (':RDSNo:')') + ScansRow = '' + Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.') end end else - ScansRow = '' - Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.') + Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.') end end else - Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.') + Scan_Services('AddNotAcceptableReason', 'Test wafers are required to be logged with this run.') end Case CurrStage _EQC 'UNLOAD' @@ -2242,3 +2254,4 @@ ClearCursors: return +