Merged PR 21151: Return To Fab Operations and Processing

This commit is contained in:
Ouellette Jonathan (CSC FI SPS MESLEO)
2025-07-16 21:17:07 +02:00
parent b607432be4
commit aabd4c3a91
56 changed files with 8856 additions and 2508 deletions

View File

@ -35,9 +35,11 @@ $Insert RDS_TEST_EQUATES
$Insert RDS_TEST_PROP_EQUATES
$Insert PRS_LAYER_EQU
Options SpecTypes = 'CLEAN', 'SURFSCAN', 'THICK', 'THICKA', 'RES', 'SRES', 'CRES', 'CONC'
Declare function Database_Services, Psn_Services, obj_Prod_Spec, Error_Services, SRP_JSON, Cust_Epi_Part_Services
Declare function Prod_Ver_Services, PRS_Stage_Services
Declare subroutine Database_Services, Psn_Services, Error_Services, SRP_JSON
Declare function Prod_Ver_Services, PRS_Stage_Services, SRP_Array
Declare subroutine Database_Services, Psn_Services, Error_Services, SRP_JSON, Extract_Si_Keys
GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
@ -72,6 +74,216 @@ Service InitializeCritParams(PSNo)
end service
Service GetRecipes(PSNo)
ErrorMsg = ''
Recipes = ''
If PSNo NE '' then
If RowExists('PROD_SPEC', PSNo) then
PropKeys = ''
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
Recipes = Xlate('PRS_PROP', PropKeys, 'MET_RECIPE', 'X')
PRSStageKeys = ''
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
Recipes<0, -1> = Xlate('PRS_STAGE', PRSStageKeys, 'MET_RECIPE', 'X')
Recipes<0, -1> = Xlate('PRS_STAGE', PRSStageKeys, 'SURFSCAN_RECIPE', 'X')
Recipes<0, -1> = @VM : Xlate('PRS_STAGE', PRSStageKeys, 'CLEAN_RECIPE', 'X')
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @VM)
end else
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
end
If ErrorMsg EQ '' then
Response = Recipes
end else
Error_Services('Add', ErrorMsg)
end
end service
Service GetAllMetrologyRecipes(PSNo, GetSurfscan, GetClean, GetRes, GetThick)
Recipes = ''
If GetSurfscan EQ '' then GetSurfscan = True$
If GetClean EQ '' then GetClean = True$
If GetRes EQ '' then GetRes = True$
If GetThick EQ '' then GetThick = True$
If GetSurfscan then Recipes := PSN_Services('GetSurfscanRecipes', PSNo) : @FM
If GetClean then Recipes := PSN_Services('GetCleanRecipes', PSNo) :@FM
If GetRes then Recipes := PSN_Services('GetResRecipes', PSNo) :@FM
If GetThick then Recipes := PSN_Services('GetThicknessRecipes', PSNo)
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
Response = Recipes
end service
Service GetSurfscanRecipes(PSNo)
Recipes = ''
If PSNo NE '' then
If RowExists('PROD_SPEC', PSNo) then
PropKeys = ''
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
PRSStageKeys = ''
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
for each PRSStageKey in PRSStageKeys using @VM setting pPos
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
TencorRecipes = Xlate('PRS_STAGE', PRSStageKey, 'SURFSCAN_RECIPE', 'X')
for each Recipe in TencorRecipes using @VM
ToolClass = 'TENCOR'
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
Next TencorRecipe
Next PRSStageKey
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
end
end
Response = Recipes
end service
Service GetCleanRecipes(PSNo)
Recipes = ''
If PSNo NE '' then
If RowExists('PROD_SPEC', PSNo) then
PropKeys = ''
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
PRSStageKeys = ''
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
for each PRSStageKey in PRSStageKeys using @VM setting pPos
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
CleanRecipes = Xlate('PRS_STAGE', PRSStageKey, 'CLEAN_RECIPE', 'X')
for each Recipe in CleanRecipes using @VM
ToolClass = 'CLEAN'
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
Next TencorRecipe
Next PRSStageKey
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
end
end
Response = Recipes
end service
Service GetThicknessRecipes(PSNo)
ErrorMsg = ''
Recipes = ''
If PSNo NE '' then
If RowExists('PROD_SPEC', PSNo) then
//First get QA Recipes
PropKeys = ''
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
Recipes = ''
PRSStageKeys = ''
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
for each PRSStageKey in PRSStageKeys using @VM setting pPos
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
PRSStageRecipes = Xlate('PRS_STAGE', PRSStageKey, 'MET_RECIPE', 'X')
for each PRSStageRecipe in PRSStageRecipes using @VM setting rPos
PropType = Xlate('PRS_STAGE', PRSStageKey, 'MET_PROP', 'X')<1, rPos>
If PropType EQ 'THICK' OR PropType EQ 'THICKA' then
Recipe = PRSStageRecipe
ToolClass = 'FTIR'
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
end
Next PRSStageRecipe
Next PRSStageKey
//Next get Rathole recipes
SpecEpiData = XLATE('PROD_SPEC', PSNo, 'SPEC_EPI', 'X')
swap @VM with @FM in SpecEpiData
swap '~' with @VM in SpecEpiData
ThicknessData = SpecEpiData<13>
ToolClass = ThicknessData<1, 1>
Recipe = ThicknessData<1, 3>
Stage = 'RDS_TEST'
If ToolClass EQ 'FTIR' OR ToolClass EQ 'ADE' then
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
end
// Remove any duplicate entries
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
end else
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
end
If ErrorMsg EQ '' then
Response = Recipes
end else
Error_Services('Add', ErrorMsg)
end
end service
Service GetResRecipes(PSNo)
ErrorMsg = ''
Recipes = ''
If PSNo NE '' then
If RowExists('PROD_SPEC', PSNo) then
//First get QA Recipes
PropKeys = ''
Extract_Si_Keys('PRS_PROP', 'PS_NO', PSNo, PropKeys)
Recipes = ''
PRSStageKeys = ''
Extract_Si_Keys('PRS_STAGE', 'PS_NO', PSNo, PRSStageKeys)
for each PRSStageKey in PRSStageKeys using @VM setting pPos
Stage = Xlate('PRS_STAGE', PRSStageKey, 'STAGE', 'X')
PRSStageRecipes = Xlate('PRS_STAGE', PRSStageKey, 'MET_RECIPE', 'X')
for each PRSStageRecipe in PRSStageRecipes using @VM setting rPos
PropType = Xlate('PRS_STAGE', PRSStageKey, 'MET_PROP', 'X')<1, rPos>
ToolClass = Xlate('PRS_STAGE', PRSStageKey, 'MET_TOOL_CLASS', 'X')<1, rPos>
If PropType EQ 'RES' OR PropType EQ 'SRES' OR PropType EQ 'CRES' OR PropType EQ 'CONC' then
Recipe = PRSStageRecipe
ToolClass = ToolClass
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
end
Next PRSStageRecipe
Next PRSStageKey
//Next get Rathole recipes
Stage = 'RDS_TEST'
SpecEpiData = XLATE('PROD_SPEC', PSNo, 'SPEC_EPI', 'X')
swap @VM with @FM in SpecEpiData
swap '~' with @VM in SpecEpiData
ResData1 = SpecEpiData<19>
If ResData1 NE '' then
ToolClass = ResData1<1, 1>
Recipe = ResData1<1, 3>
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
end
ResData2 = SpecEpiData<14>
If ResData2 NE '' then
ToolClass = ResData2<1, 1>
Recipe = ResData2<1, 3>
Recipes<-1> = ToolClass : @VM : Recipe : @VM : Stage
end
// Remove any duplicate entries
Recipes = SRP_Array('Clean', Recipes, 'TrimAndMakeUnique', @FM)
end else
ErrorMsg = 'Error in ':Service:' service. PROD_SPEC record "':PSNo:'" does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null PSNo passed into service.'
end
If ErrorMsg EQ '' then
Response = Recipes
end else
Error_Services('Add', ErrorMsg)
end
end service
Service CheckPSNStages(PSNo, Stage)
Begin Case
@ -950,3 +1162,8 @@ CheckAdHoc:
return