Merged PR 19143: Require 100 percent centerpoint on MU conversion.

Initial commit.

Create FQASignatureReady service in QA_SERVICES.

Create SignFQA service in SIGNATURE_SERVICES.

Commit remaining portion of project.

Implement changes requested in review meeting.

Fix typo. Add new MU logic to final entry point.

Restrict logic to only apply to 'THICK'
inspections.

Bypass new logic if Biorad 4 and 5 are down.
This commit is contained in:
Mitchem Dakota (CSC FI SPS MESLEO External)
2025-06-18 22:23:57 +02:00
parent 5cb17c6d52
commit 273b7f67a6
11 changed files with 254 additions and 83 deletions

View File

@ -1722,6 +1722,84 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName)
end service
Service ApplyQA100PercentADE(RDSNo)
Result = False$
ErrorMsg = ''
If RDSNo NE '' then
// Change the QA metrology requirements to all wafers
WoNo = Xlate('RDS', RDSNo, RDS_WO$, 'X')
CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X')
WoMatQaKey = WoNo : '*' : CassNo
WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X')
EpiCheck = Rds_Services('IsEpiPro', RDSNo)
If EpiCheck EQ True$ then
WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X')
end else
WoWaferQty = Xlate('RDS', RDSNo, 'WFRS_OUT', 'X')
end
WoMatQaStages = WoMatQaRec<WO_MAT_QA_STAGE$>
WoMatQaProfiles = WoMatQaRec<WO_MAT_QA_PROFILE$>
WoMatQaSlots = WoMatQaRec<WO_MAT_QA_SLOT$>
WoMatQaWfrQtys = WoMatQaRec<WO_MAT_QA_WFR_QTY$>
WoMatQaProps = WoMatQaRec<WO_MAT_QA_PROP$>
WoMatQaToolClasses = WoMatQaRec<WO_MAT_QA_TOOL_CLASS$>
WoMatQaRecipes = WoMatQaRec<WO_MAT_QA_RECIPE$>
WoMatQaRecipePatterns = WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$>
WoMatQaMin = WoMatQaRec<WO_MAT_QA_MIN$>
WoMatQaMax = WoMatQaRec<WO_MAT_QA_MAX$>
WoMatQaOOS = WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$>
StageCount = DCount(WoMatQaStages, @VM)
For stageIdx = 1 to StageCount
If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then
Slot = WoMatQaSlots<0, stageIdx>
If (Slot _NEC 'L') then
WoMatQaSlots<0, stageIdx> = 'A'
WoMatQaWfrQtys<0, stageIdx> = WoWaferQty
end
If (Slot _EQC 'L') then
WoMatQaStages<0, stageIdx> = ''
WoMatQaProfiles<0, stageIdx> = ''
WoMatQaSlots<0, stageIdx> = ''
WoMatQaWfrQtys<0, stageIdx> = ''
WoMatQaProps<0, stageIdx> = ''
WoMatQaToolClasses<0, stageIdx> = ''
WoMatQaRecipes<0, stageIdx> = ''
WoMatQaRecipePatterns<0, stageIdx> = ''
WoMatQaMin<0, stageIdx> = ''
WoMatQaMax<0, stageIdx> = ''
WoMatQaOOS<0, stageIdx> = ''
end
end
Next stageIdx
WoMatQaRec<WO_MAT_QA_STAGE$> = WoMatQaStages
WoMatQaRec<WO_MAT_QA_PROFILE$> = WoMatQaProfiles
WoMatQaRec<WO_MAT_QA_SLOT$> = WoMatQaSlots
WoMatQaRec<WO_MAT_QA_WFR_QTY$> = WoMatQaWfrQtys
WoMatQaRec<WO_MAT_QA_PROP$> = WoMatQaProps
WoMatQaRec<WO_MAT_QA_TOOL_CLASS$> = WoMatQaToolClasses
WoMatQaRec<WO_MAT_QA_RECIPE$> = WoMatQaRecipes
WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$> = WoMatQaRecipePatterns
WoMatQaRec<WO_MAT_QA_MIN$> = WoMatQaMin
WoMatQaRec<WO_MAT_QA_MAX$> = WoMatQaMax
WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$> = WoMatQaOOS
WoMatQaRec<WO_MAT_QA_SIG$> = ''
WoMatQaRec<WO_MAT_QA_SIG_DTM$> = ''
WoMatQaRec<WO_MAT_QA_RESULT$> = ''
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
end else
ErrorMsg = 'Error in ':Service:' service. Null RdsKey passed into service!'
end
If ErrorMsg NE '' then
Error_Services('Add', ErrorMsg)
end else
Result = True$
end
end service
Service ApplyAbortMetrology(RdsKeys)
@ -1740,58 +1818,8 @@ Service ApplyAbortMetrology(RdsKeys)
Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
If ErrorMsg EQ '' then
// Change the QA metrology requirements to all wafers
CassNo = Xlate('RDS', RdsKey, 'CASS_NO', 'X')
WoMatQaKey = WoNo : '*' : CassNo
WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X')
WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X')
WoMatQaStages = WoMatQaRec<WO_MAT_QA_STAGE$>
WoMatQaProfiles = WoMatQaRec<WO_MAT_QA_PROFILE$>
WoMatQaSlots = WoMatQaRec<WO_MAT_QA_SLOT$>
WoMatQaWfrQtys = WoMatQaRec<WO_MAT_QA_WFR_QTY$>
WoMatQaProps = WoMatQaRec<WO_MAT_QA_PROP$>
WoMatQaToolClasses = WoMatQaRec<WO_MAT_QA_TOOL_CLASS$>
WoMatQaRecipes = WoMatQaRec<WO_MAT_QA_RECIPE$>
WoMatQaRecipePatterns = WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$>
WoMatQaMin = WoMatQaRec<WO_MAT_QA_MIN$>
WoMatQaMax = WoMatQaRec<WO_MAT_QA_MAX$>
WoMatQaOOS = WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$>
StageCount = DCount(WoMatQaStages, @VM)
For stageIdx = 1 to StageCount
If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then
Slot = WoMatQaSlots<0, stageIdx>
If (Slot _NEC 'L') then
WoMatQaSlots<0, stageIdx> = 'A'
WoMatQaWfrQtys<0, stageIdx> = WoWaferQty
end
If (Slot _EQC 'L') then
WoMatQaStages<0, stageIdx> = ''
WoMatQaProfiles<0, stageIdx> = ''
WoMatQaSlots<0, stageIdx> = ''
WoMatQaWfrQtys<0, stageIdx> = ''
WoMatQaProps<0, stageIdx> = ''
WoMatQaToolClasses<0, stageIdx> = ''
WoMatQaRecipes<0, stageIdx> = ''
WoMatQaRecipePatterns<0, stageIdx> = ''
WoMatQaMin<0, stageIdx> = ''
WoMatQaMax<0, stageIdx> = ''
WoMatQaOOS<0, stageIdx> = ''
end
end
Next stageIdx
WoMatQaRec<WO_MAT_QA_STAGE$> = WoMatQaStages
WoMatQaRec<WO_MAT_QA_PROFILE$> = WoMatQaProfiles
WoMatQaRec<WO_MAT_QA_SLOT$> = WoMatQaSlots
WoMatQaRec<WO_MAT_QA_WFR_QTY$> = WoMatQaWfrQtys
WoMatQaRec<WO_MAT_QA_PROP$> = WoMatQaProps
WoMatQaRec<WO_MAT_QA_TOOL_CLASS$> = WoMatQaToolClasses
WoMatQaRec<WO_MAT_QA_RECIPE$> = WoMatQaRecipes
WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$> = WoMatQaRecipePatterns
WoMatQaRec<WO_MAT_QA_MIN$> = WoMatQaMin
WoMatQaRec<WO_MAT_QA_MAX$> = WoMatQaMax
WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$> = WoMatQaOOS
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$)
If ErrorMsg EQ '' then
Result = Rds_Services('ApplyQA100PercentADE', RDSKey)
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
end
@ -1855,7 +1883,3 @@ return