Finished development on requiring TW Entry on metrology frequency for scan app logging
This commit is contained in:
parent
63bded8bb1
commit
75f6d207c6
@ -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
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -666,6 +666,7 @@ Service ProcessScanData(ScanID, ScanJSON)
|
||||
CassNo = RDSRec<RDS_CASS_NO$>
|
||||
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<SCANS.SUPPLIER_LOT$>
|
||||
RDSSuppLot = RDSRec<RDS_LOT_NUM$>
|
||||
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<SCANS.SUPPLIER_LOT$>
|
||||
RDSSuppLot = RDSRec<RDS_LOT_NUM$>
|
||||
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<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?
|
||||
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 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<SCANS.SUPPLIER_LOT$> = ''
|
||||
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
|
||||
end
|
||||
end else
|
||||
ScansRow<SCANS.SUPPLIER_LOT$> = ''
|
||||
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<SCANS.SUPPLIER_LOT$>
|
||||
RDSSuppLot = RDSRec<RDS_LOT_NUM$>
|
||||
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<SCANS.TOOL_ID$>
|
||||
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<SCANS.OVERRIDE_REQD$> = True$
|
||||
ScansRow<SCANS.OVERRIDE_REASON$> = ROTRBlockReason
|
||||
ScansRow<SCANS.OVERRIDE_TYPE$> = 'ROTR'
|
||||
IsTWLoggingReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
|
||||
If IsTWLoggingReqd EQ True$ AND TestWaferLotData NE '' then
|
||||
ScannedSuppLot = ScansRow<SCANS.SUPPLIER_LOT$>
|
||||
RDSSuppLot = RDSRec<RDS_LOT_NUM$>
|
||||
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<SCANS.TOOL_ID$>
|
||||
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<SCANS.OVERRIDE_REQD$> = False$
|
||||
ScansRow<SCANS.OVERRIDE_REASON$> = ''
|
||||
ScansRow<SCANS.OVERRIDE_TYPE$> = ''
|
||||
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<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 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<SCANS.SUPPLIER_LOT$> = ''
|
||||
Error_Services('Add', '(':CassetteID:') Supplier lot mismatch.')
|
||||
end
|
||||
end else
|
||||
ScansRow<SCANS.SUPPLIER_LOT$> = ''
|
||||
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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user