Finished development on requiring TW Entry on metrology frequency for scan app logging

This commit is contained in:
Infineon\Ouellette 2025-01-10 14:36:00 -07:00
parent 63bded8bb1
commit 75f6d207c6
2 changed files with 111 additions and 94 deletions

View File

@ -756,6 +756,10 @@ Service IsTWLoggingReqd(RDSNo)
end else end else
Response = True$ Response = True$
end 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 end service
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------

View File

@ -666,6 +666,7 @@ Service ProcessScanData(ScanID, ScanJSON)
CassNo = RDSRec<RDS_CASS_NO$> CassNo = RDSRec<RDS_CASS_NO$>
CurrStatus = obj_WO_Mat('CurrStatus', WONo:'*':CassNo) CurrStatus = obj_WO_Mat('CurrStatus', WONo:'*':CassNo)
// RDS Format // RDS Format
IsEpiPro = RDS_Services('IsEpiPro', CassetteID) IsEpiPro = RDS_Services('IsEpiPro', CassetteID)
If IsEpiPro EQ False$ then If IsEpiPro EQ False$ then
@ -891,64 +892,70 @@ Service ProcessScanData(ScanID, ScanJSON)
LSParmsComp = Xlate('RDS', RDSNo, 'LS_PARMS_COMP', 'X') LSParmsComp = Xlate('RDS', RDSNo, 'LS_PARMS_COMP', 'X')
FirstParmsComp = LSParmsComp<1,1> FirstParmsComp = LSParmsComp<1,1>
If (FirstParmsComp EQ False$) then RDS_Services('CopyRDSLayerParameters', RDSNo) If (FirstParmsComp EQ False$) then RDS_Services('CopyRDSLayerParameters', RDSNo)
// Supplier lot verification //Test Wafer logging verification
ScannedSuppLot = ScansRow<SCANS.SUPPLIER_LOT$> IsTWLoggingReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
RDSSuppLot = RDSRec<RDS_LOT_NUM$> If IsTWLoggingReqd EQ True$ AND TestWaferLotData NE '' then
If (ScannedSuppLot NE '') then
If (ScannedSuppLot _EQC RDSSuppLot) then // Supplier lot verification
WaferCountAckReq = Xlate('RDS', RDSNo, 'WAFER_COUNT_ACK_REQ', 'X') ScannedSuppLot = ScansRow<SCANS.SUPPLIER_LOT$>
If WaferCountAckReq EQ False$ then RDSSuppLot = RDSRec<RDS_LOT_NUM$>
PreStageReady = '' If (ScannedSuppLot NE '') then
LoadStageReady = '' If (ScannedSuppLot _EQC RDSSuppLot) then
PreStageReady = QA_Services('PreEpiSignatureReady', RDSNo, Username, WaferQty, Reactor) WaferCountAckReq = Xlate('RDS', RDSNo, 'WAFER_COUNT_ACK_REQ', 'X')
If PreStageReady EQ True$ then If WaferCountAckReq EQ False$ then
LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide, True$, Reactor) PreStageReady = ''
If (LoadStageReady NE True$) then 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<SCANS.OVERRIDE_REQD$> = True$
ScansRow<SCANS.OVERRIDE_REASON$> = ROTRBlockReason
ScansRow<SCANS.OVERRIDE_TYPE$> = 'ROTR'
Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled")
end else
ScansRow<SCANS.OVERRIDE_REQD$> = False$
ScansRow<SCANS.OVERRIDE_REASON$> = ''
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
end
End Case
end
end else
// Why is it not ready? // Why is it not ready?
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
Begin Case Begin Case
Case IndexC(ErrorMsg, 'supplement', 1) Case IndexC(ErrorMsg, 'supplement', 1)
// Clear the error to return a JSON payload and handle the acknowledgements.
Error_Services('Clear') Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', ErrorMsg) Scan_Services('AddNotAcceptableReason', ErrorMsg)
Case IndexC(ErrorMsg, 'ROTR', 1) End Case
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<SCANS.OVERRIDE_REQD$> = True$
ScansRow<SCANS.OVERRIDE_REASON$> = ROTRBlockReason
ScansRow<SCANS.OVERRIDE_TYPE$> = 'ROTR'
Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled")
end else
ScansRow<SCANS.OVERRIDE_REQD$> = False$
ScansRow<SCANS.OVERRIDE_REASON$> = ''
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
end
End Case
end end
end else end else
// Why is it not ready? Scan_Services('AddNotAcceptableReason', 'The cassette wafer count must be verified against the scheduled wafer count to proceed.')
ErrorMsg = Error_Services('GetMessage')
Begin Case
Case IndexC(ErrorMsg, 'supplement', 1)
Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', ErrorMsg)
End Case
end end
end else end else
Scan_Services('AddNotAcceptableReason', 'The cassette wafer count must be verified against the scheduled wafer count to proceed.') ScansRow<SCANS.SUPPLIER_LOT$> = ''
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
end end
end else end else
ScansRow<SCANS.SUPPLIER_LOT$> = '' Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.')
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
end end
end else 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
end else end else
Error_Services('Add', '(':CassetteID:') The first run must be completed using the OpenInsight user interface.') Error_Services('Add', '(':CassetteID:') The first run must be completed using the OpenInsight user interface.')
end end
@ -957,68 +964,73 @@ Service ProcessScanData(ScanID, ScanJSON)
end end
Case CurrStage _EQC 'LOAD' Case CurrStage _EQC 'LOAD'
Action = 'LOAD' Action = 'LOAD'
ScannedSuppLot = ScansRow<SCANS.SUPPLIER_LOT$> IsTWLoggingReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
RDSSuppLot = RDSRec<RDS_LOT_NUM$> If IsTWLoggingReqd EQ True$ AND TestWaferLotData NE '' then
If (ScannedSuppLot NE '') then ScannedSuppLot = ScansRow<SCANS.SUPPLIER_LOT$>
If (ScannedSuppLot _EQC RDSSuppLot) then RDSSuppLot = RDSRec<RDS_LOT_NUM$>
// Scheduled tool verification (only supports reactors at the moment) If (ScannedSuppLot NE '') then
ClearSelect If (ScannedSuppLot _EQC RDSSuppLot) then
SchedTool = Xlate('RDS', RDSNo, 'SCHED_REACTOR', 'X') // Scheduled tool verification (only supports reactors at the moment)
ClearSelect ClearSelect
SchedTool = 'R':SchedTool SchedTool = Xlate('RDS', RDSNo, 'SCHED_REACTOR', 'X')
ScanTool = ScansRow<SCANS.TOOL_ID$> ClearSelect
If SchedTool EQ ScanTool then SchedTool = 'R':SchedTool
// Check if LOAD stage is ready to sign ScanTool = ScansRow<SCANS.TOOL_ID$>
RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') If SchedTool EQ ScanTool then
If RDSLayerAckReq EQ False$ then // Check if LOAD stage is ready to sign
If LWIInstAckReq EQ False$ then RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X')
If LoadInstAckReq EQ False$ then If RDSLayerAckReq EQ False$ then
LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide) If LWIInstAckReq EQ False$ then
If (LoadStageReady NE True$) then If LoadInstAckReq EQ False$ then
// Why is it not ready? LoadStageReady = QA_Services('LoadSignatureReady', RDSNo, Username, WaferQty, LLSide)
ErrorMsg = Error_Services('GetMessage') If (LoadStageReady NE True$) then
Begin Case // Why is it not ready?
Case IndexC(ErrorMsg, 'supplement', 1) ErrorMsg = Error_Services('GetMessage')
// Clear the error to return a JSON payload and handle the acknowledgements. Begin Case
Error_Services('Clear') Case IndexC(ErrorMsg, 'supplement', 1)
Scan_Services('AddNotAcceptableReason', ErrorMsg) // Clear the error to return a JSON payload and handle the acknowledgements.
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<SCANS.OVERRIDE_REQD$> = True$
ScansRow<SCANS.OVERRIDE_REASON$> = ROTRBlockReason
ScansRow<SCANS.OVERRIDE_TYPE$> = 'ROTR'
Error_Services('Clear') Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled") Scan_Services('AddNotAcceptableReason', ErrorMsg)
end else Case IndexC(ErrorMsg, 'ROTR', 1)
ScansRow<SCANS.OVERRIDE_REQD$> = False$ ROTRBlock = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS$, True$, 0, False$)
ScansRow<SCANS.OVERRIDE_REASON$> = '' ROTRBlockReason = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ROTR_STATUS_REASON$, True$, 0, False$)
ScansRow<SCANS.OVERRIDE_TYPE$> = '' ROTREnabled = Database_Services('ReadDataColumn', 'REACTOR', Reactor, REACTOR_ENABLE_ROTR$, True$, 0, False$)
end If ( (ROTRBlock NE 'P') AND (ROTREnabled EQ True$) ) then
End Case // Clear the error to return a JSON payload and allow for OVERRIDE scan.
ScansRow<SCANS.OVERRIDE_REQD$> = True$
ScansRow<SCANS.OVERRIDE_REASON$> = ROTRBlockReason
ScansRow<SCANS.OVERRIDE_TYPE$> = 'ROTR'
Error_Services('Clear')
Scan_Services('AddNotAcceptableReason', "ROTR Load Block Enabled")
end else
ScansRow<SCANS.OVERRIDE_REQD$> = False$
ScansRow<SCANS.OVERRIDE_REASON$> = ''
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
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
end else end else
Scan_Services('AddNotAcceptableReason', 'The LOAD stage engineering instructions must be acknowledged before the load operation can be signed.') Scan_Services('AddNotAcceptableReason', 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.')
end end
end else end else
Scan_Services('AddNotAcceptableReason', 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.') ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.'
end Scan_Services('AddNotAcceptableReason', ErrorMessage)
end
end else end else
ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' Error_Services('Add', 'Scanned tool ':ScanTool:' does not match the scheduled tool ':SchedTool:'. (':RDSNo:')')
Scan_Services('AddNotAcceptableReason', ErrorMessage)
end end
end else end else
Error_Services('Add', 'Scanned tool ':ScanTool:' does not match the scheduled tool ':SchedTool:'. (':RDSNo:')') ScansRow<SCANS.SUPPLIER_LOT$> = ''
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
end end
end else end else
ScansRow<SCANS.SUPPLIER_LOT$> = '' Scan_Services('AddNotAcceptableReason', 'Supplier lot scan required in order to complete a tool scan.')
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
end end
end else 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
Case CurrStage _EQC 'UNLOAD' Case CurrStage _EQC 'UNLOAD'
@ -2242,3 +2254,4 @@ ClearCursors:
return return