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
|
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
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user