Merged PR 10039: Code to determine if a test wafer usage logging is required.

Description
Created method to determine if a TW is required.

HTR and ASM type reactors will required a test wafer to be logged on runs where a test wafer is prescribed.
ASM+ type reactors will require a test wafer to be logged on one run prior to a run where a test wafer is prescribed for metrology.
This code is gated by an active switch which will be removed when the system goes live.

EpiPro is not effected

Related work items: #222043
This commit is contained in:
Ouellette Jonathan (CSC FI SPS MESLEO) 2025-02-04 18:53:58 +01:00
parent 790d3e7b8c
commit 49c9ab09fd
2 changed files with 568 additions and 603 deletions

View File

@ -340,6 +340,52 @@ Event PUB_SIGN.CLICK()
Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo)
If Response EQ False$ then return
end
//Check if TW Required
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then
UsingTestWafers = False$
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
If ExistingTestWafersLogged NE True$ then
If Not(IsTWReqd) then
//Test wafer logging is NOT required here.
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?')
If UsingTestWafers EQ True$ then
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
If TWLogResult NE True$ then
ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
If Not(ContinueSign) then return
end
end
end else
//Test wafer logging is Required here.
Begin Case
Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR'
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?')
Case ReactorType EQ 'ASM+'
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?')
End Case
If UsingTestWafers EQ True$ then
//User has stated that they are using test wafers
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
If TWLogResult NE True$ then
//User exited the the TW log form without logging anything.
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Not(Override) then return
end
end else
//User has stated that they are NOT using test wafers
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Not(Override) then return
end
end
end
end
ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide)
If ReadyToSign EQ True$ then
@ -349,109 +395,12 @@ Event PUB_SIGN.CLICK()
Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams)
Valid = Response<1>
If (Valid EQ True$) then
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then
UsingTestWafers = False$
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
If ExistingTestWafersLogged EQ '' then
if ReactorType NE 'EPP' then
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
end
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
If UsingTestWafers then
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
If TWLogResult then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end else
If IsTWReqd then
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end else
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
If ContinueLoad then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end
end else
if IsTWReqd EQ False$ then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end else
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end
end else
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end else
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end else
if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then
UsingTestWafers = False$
ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo)
If ExistingTestWafersLogged EQ '' then
if ReactorType NE 'EPP' then
UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?')
end
IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo)
If UsingTestWafers then
TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor)
If TWLogResult then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end else
If IsTWReqd then
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end else
ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?')
If ContinueLoad then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end
end else
if IsTWReqd EQ False$ then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end else
UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override."
OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH'
UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg)
Override = UserVerification<1>
If Override then
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end
end else
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end else
QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide)
end
end
end
If Error_Services('HasError') then
ErrorMsg = Error_Services('GetMessage')
ErrMsg(ErrorMsg)

View File

@ -788,6 +788,7 @@ Service IsTWLoggingReqd(RDSNo)
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
WONo = RDSRec<RDS_WO$>
ReactNo = RDSRec<RDS_REACTOR$>
ReactorType = Database_Services('ReadDataColumn', 'REACTOR', ReactNo, REACTOR_REACT_TYPE$, True$, 0, False$)
ThisReactorRunOrder = 0
ReactRDSNos = RDS_Services('GetRDSRunHistoryByReactorAndWO', ReactNo, WONo)
LOCATE RDSNo IN ReactRDSNos USING @VM SETTING ThisReactorRunOrder ELSE Return
@ -808,9 +809,24 @@ Service IsTWLoggingReqd(RDSNo)
CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1
CASE ThisReactorRunOrder = Start ; IsTWReqd = 1
CASE NUM(MeasureFreq)
Begin Case
Case ReactorType EQ 'HTR'
//Logging required on lot the data gets logged to
IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN
IsTWReqd = True$
END
Case ReactorType EQ 'ASM'
//Logging required on lot the data gets logged to
IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN
IsTWReqd = True$
END
Case ReactorType EQ 'ASM+'
//Logging required on lot prior to the one the data gets logged to.
IF MOD(ThisReactorRunOrder,MeasureFreq) = 0 THEN
IsTWReqd = True$
END
End Case
END CASE
end
Until IsTWReqd EQ True$