Compare commits
	
		
			17 Commits
		
	
	
		
			dcb61e220c
			...
			06-16-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f48e277369 | |||
| 2d3f534a71 | |||
| f6ba173f47 | |||
| 98e02f8c40 | |||
| de6296b1d3 | |||
| ebd8b36d13 | |||
| 803f946c7e | |||
| 16c7bc6926 | |||
| 216df9b4ef | |||
| 5eec9386c2 | |||
| f3ad7adfa8 | |||
| c4fbf7c1d9 | |||
| 2a28c4b743 | |||
| e5f0e9b7f1 | |||
| 869787e0f3 | |||
| 38fc89dac6 | |||
| 614da8ad3b | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,4 @@
 | 
				
			|||||||
LSL2/STPROC/TEST_DANIEL*.txt
 | 
					LSL2/STPROC/TEST_DANIEL*.txt
 | 
				
			||||||
LSL2/STPROC/TEST_DAKOTA.txt
 | 
					LSL2/STPROC/TEST_DAKOTA.txt
 | 
				
			||||||
LSL2/STPROC/JONATHAN_SERVICES.txt
 | 
					LSL2/STPROC/JONATHAN_SERVICES.txt
 | 
				
			||||||
 | 
					.vscode/**/*.png
 | 
				
			||||||
							
								
								
									
										234
									
								
								.vscode/.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								.vscode/.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,234 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08resisrp2100\06_SourceCode\met08resisrp2100\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.Date // 001
 | 
				
			||||||
 | 
					// x.Employee // 002
 | 
				
			||||||
 | 
					// x.Recipe // 003
 | 
				
			||||||
 | 
					// x.Reactor // 004
 | 
				
			||||||
 | 
					// x.RDS // 005
 | 
				
			||||||
 | 
					// x.PSN // 006
 | 
				
			||||||
 | 
					// x.Layer // 007
 | 
				
			||||||
 | 
					// x.Zone // 008
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08anlysdifaast230\06_SourceCode\met08anlysdifaast230\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.PSN // 001
 | 
				
			||||||
 | 
					// x.Reactor // 002
 | 
				
			||||||
 | 
					// logistics.MesEntity // 003
 | 
				
			||||||
 | 
					// x.RDS // 004
 | 
				
			||||||
 | 
					// x.Recipe // 005
 | 
				
			||||||
 | 
					// x.Employee // 006
 | 
				
			||||||
 | 
					// x.SlotNumber // 007
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08thftirstratus\06_SourceCode\met08thftirstratus\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// "Stratus_" // 001
 | 
				
			||||||
 | 
					// x.Date // 002
 | 
				
			||||||
 | 
					// logistics.JobID // 003
 | 
				
			||||||
 | 
					// "FQA Thickness" // 004
 | 
				
			||||||
 | 
					// x.Employee // 005
 | 
				
			||||||
 | 
					// x.Recipe // 006
 | 
				
			||||||
 | 
					// x.Reactor // 007
 | 
				
			||||||
 | 
					// x.RDS // 008
 | 
				
			||||||
 | 
					// x.PSN // 009
 | 
				
			||||||
 | 
					// x.Lot // 010
 | 
				
			||||||
 | 
					// x.Cassette // 011
 | 
				
			||||||
 | 
					// x.MeanThickness // 012
 | 
				
			||||||
 | 
					// descriptions[i].Slot // 013
 | 
				
			||||||
 | 
					// descriptions[i].Mean // 014
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08thftirqs408m\06_SourceCode\met08thftirqs408m\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// Bio-Rad UniqueId // 001
 | 
				
			||||||
 | 
					// Date // 002
 | 
				
			||||||
 | 
					// ThicknessFourteenCriticalPointsAverage // 003
 | 
				
			||||||
 | 
					// Recipe // 004
 | 
				
			||||||
 | 
					// Reactor // 005
 | 
				
			||||||
 | 
					// RDS // 006
 | 
				
			||||||
 | 
					// PSN // 007
 | 
				
			||||||
 | 
					// Layer // 008
 | 
				
			||||||
 | 
					// Zone // 009
 | 
				
			||||||
 | 
					// Cassette // 010
 | 
				
			||||||
 | 
					// Wafer // 011
 | 
				
			||||||
 | 
					// RVThickness // 012
 | 
				
			||||||
 | 
					// Position // 013
 | 
				
			||||||
 | 
					// Thickness // 014
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08resimapcde\06_SourceCode\met08resimapcde\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.UniqueId // 001
 | 
				
			||||||
 | 
					// x.Run // 002
 | 
				
			||||||
 | 
					// x.Date // 003
 | 
				
			||||||
 | 
					// x.Lot // 004
 | 
				
			||||||
 | 
					// x.Recipe // 005
 | 
				
			||||||
 | 
					// x.Reactor // 006
 | 
				
			||||||
 | 
					// x.RDS // 007
 | 
				
			||||||
 | 
					// x.PSN // 008
 | 
				
			||||||
 | 
					// x.Layer // 009
 | 
				
			||||||
 | 
					// x.Zone // 010
 | 
				
			||||||
 | 
					// logistics.MesEntity // 011
 | 
				
			||||||
 | 
					// x.Employee // 012
 | 
				
			||||||
 | 
					// x.Engineer // 013
 | 
				
			||||||
 | 
					// x.DLRatio // 014
 | 
				
			||||||
 | 
					// x.Temp // 015
 | 
				
			||||||
 | 
					// x.AutoOptimizeGain // 016
 | 
				
			||||||
 | 
					// x.AutoProbeHeightSet // 017
 | 
				
			||||||
 | 
					// x.DataReject // 018
 | 
				
			||||||
 | 
					// x.FileName // 019
 | 
				
			||||||
 | 
					// x.Avg // 020
 | 
				
			||||||
 | 
					// x.StdDev // 021
 | 
				
			||||||
 | 
					// x.SemiRadial // 022
 | 
				
			||||||
 | 
					// description.Pt // 023
 | 
				
			||||||
 | 
					// description.R // 024
 | 
				
			||||||
 | 
					// description.T // 025
 | 
				
			||||||
 | 
					// description.Rs // 026
 | 
				
			||||||
 | 
					// description.Merit // 027
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08resihgcv\06_SourceCode\met08resihgcv\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.UniqueId // 001
 | 
				
			||||||
 | 
					// logistics.MesEntity // 002
 | 
				
			||||||
 | 
					// x.Reactor // 003
 | 
				
			||||||
 | 
					// x.RDS // 004
 | 
				
			||||||
 | 
					// x.PSN // 005
 | 
				
			||||||
 | 
					// x.Layer // 006
 | 
				
			||||||
 | 
					// x.Zone // 007
 | 
				
			||||||
 | 
					// x.Wafer // 008
 | 
				
			||||||
 | 
					// x.Lot // 009
 | 
				
			||||||
 | 
					// x.Plan // 010
 | 
				
			||||||
 | 
					// x.Date // 011
 | 
				
			||||||
 | 
					// x.WaferSize // 012
 | 
				
			||||||
 | 
					// x.Ccomp // 013
 | 
				
			||||||
 | 
					// x.Area // 014
 | 
				
			||||||
 | 
					// x.CondType // 015
 | 
				
			||||||
 | 
					// x.Model // 016
 | 
				
			||||||
 | 
					// x.StartVoltage // 017
 | 
				
			||||||
 | 
					// x.StopVoltage // 018
 | 
				
			||||||
 | 
					// x.RampRate // 019
 | 
				
			||||||
 | 
					// x.GLimit // 020
 | 
				
			||||||
 | 
					// x.SetupFile // 021
 | 
				
			||||||
 | 
					// x.SetupFile // 022
 | 
				
			||||||
 | 
					// x.Folder // 023
 | 
				
			||||||
 | 
					// x.Pattern // 024
 | 
				
			||||||
 | 
					// x.RhoMethod // 025
 | 
				
			||||||
 | 
					// x.NAvgMean // 026
 | 
				
			||||||
 | 
					// x.NAvgStdDev // 027
 | 
				
			||||||
 | 
					// x.NAvgRadialGradient // 028
 | 
				
			||||||
 | 
					// x.NslMean // 029
 | 
				
			||||||
 | 
					// x.NslStdDev // 030
 | 
				
			||||||
 | 
					// x.NslRadialGradient // 031
 | 
				
			||||||
 | 
					// x.VdMean // 032
 | 
				
			||||||
 | 
					// x.VdStdDev // 033
 | 
				
			||||||
 | 
					// x.VdRadialGradient // 034
 | 
				
			||||||
 | 
					// x.FlatZMean // 035
 | 
				
			||||||
 | 
					// x.FlatZStdDev // 036
 | 
				
			||||||
 | 
					// x.FlatZRadialGradient // 037
 | 
				
			||||||
 | 
					// x.RhoAvgMean // 038
 | 
				
			||||||
 | 
					// x.RhoAvgStdDev // 039
 | 
				
			||||||
 | 
					// x.RhoAvgRadialGradient // 040
 | 
				
			||||||
 | 
					// x.RhoslMean // 041
 | 
				
			||||||
 | 
					// x.RhoslStdDev // 042
 | 
				
			||||||
 | 
					// x.RhoslRadialGradient // 043
 | 
				
			||||||
 | 
					// x.PhaseMean // 044
 | 
				
			||||||
 | 
					// x.PhaseStdDev // 045
 | 
				
			||||||
 | 
					// x.PhaseRadialGradient // 046
 | 
				
			||||||
 | 
					// x.GradeMean // 047
 | 
				
			||||||
 | 
					// x.GradeStdDev // 048
 | 
				
			||||||
 | 
					// x.GradeRadialGradient // 049
 | 
				
			||||||
 | 
					// x.RsMean // 050
 | 
				
			||||||
 | 
					// x.RsStdDev // 051
 | 
				
			||||||
 | 
					// x.RsRadialGradient // 052
 | 
				
			||||||
 | 
					// description.Index // 053
 | 
				
			||||||
 | 
					// description.NAvg // 054
 | 
				
			||||||
 | 
					// description.Nsl // 055
 | 
				
			||||||
 | 
					// description.Vd // 056
 | 
				
			||||||
 | 
					// description.FlatZ // 057
 | 
				
			||||||
 | 
					// description.RhoAvg // 058
 | 
				
			||||||
 | 
					// description.Rhosl // 059
 | 
				
			||||||
 | 
					// description.Phase // 060
 | 
				
			||||||
 | 
					// description.Grade // 061
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08ddupsfs6420\06_SourceCode\met08ddupsfs6420\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.AreaCountAvg       // 001 - AreaCountAvg
 | 
				
			||||||
 | 
					// x.AreaCountMax       // 002 - AreaCountMax
 | 
				
			||||||
 | 
					// x.AreaCountMin       // 003 - AreaCountMin
 | 
				
			||||||
 | 
					// x.AreaCountStdDev    // 004 - AreaCountStdDev
 | 
				
			||||||
 | 
					// x.AreaTotalAvg       // 005 - AreaTotalAvg
 | 
				
			||||||
 | 
					// x.AreaTotalMax       // 006 - AreaTotalMax
 | 
				
			||||||
 | 
					// x.AreaTotalMin       // 007 - AreaTotalMin
 | 
				
			||||||
 | 
					// x.AreaTotalStdDev    // 008 - AreaTotalStdDev
 | 
				
			||||||
 | 
					// x.Date               // 009 - 
 | 
				
			||||||
 | 
					// x.HazeAverageAvg     // 010 - Haze Average
 | 
				
			||||||
 | 
					// x.HazeAverageMax     // 011 - 
 | 
				
			||||||
 | 
					// x.HazeAverageMin     // 012 - 
 | 
				
			||||||
 | 
					// x.HazeAverageStdDev  // 013 - 
 | 
				
			||||||
 | 
					// x.HazeRegionAvg      // 014 - 
 | 
				
			||||||
 | 
					// x.HazeRegionMax      // 015 - 
 | 
				
			||||||
 | 
					// x.HazeRegionMin      // 016 - 
 | 
				
			||||||
 | 
					// x.HazeRegionStdDev   // 017 - 
 | 
				
			||||||
 | 
					// x.Lot                // 018 - 
 | 
				
			||||||
 | 
					// x.LPDCM2Avg          // 019 - 
 | 
				
			||||||
 | 
					// x.LPDCM2Max          // 020 - 
 | 
				
			||||||
 | 
					// x.LPDCM2Min          // 021 - 
 | 
				
			||||||
 | 
					// x.LPDCM2StdDev       // 022 - 
 | 
				
			||||||
 | 
					// x.LPDCountAvg        // 023 - 
 | 
				
			||||||
 | 
					// x.LPDCountMax        // 024 - 
 | 
				
			||||||
 | 
					// x.LPDCM2Min          // 025 - 
 | 
				
			||||||
 | 
					// x.LPDCountStdDev     // 026 - 
 | 
				
			||||||
 | 
					// x.Employee           // 027 - 
 | 
				
			||||||
 | 
					// x.RDS                // 028 - Lot
 | 
				
			||||||
 | 
					// x.Reactor            // 029 - Process
 | 
				
			||||||
 | 
					// x.Recipe             // 030 - Part
 | 
				
			||||||
 | 
					// x.ScratchCountAvg    // 031 - Scratch Count
 | 
				
			||||||
 | 
					// x.ScratchCountMax    // 032 - 
 | 
				
			||||||
 | 
					// x.ScratchCountMin    // 033 - 
 | 
				
			||||||
 | 
					// x.ScratchTotalStdDev // 034 - 
 | 
				
			||||||
 | 
					// x.ScratchTotalAvg    // 035 - Scratch Length
 | 
				
			||||||
 | 
					// x.ScratchTotalMax    // 036 - 
 | 
				
			||||||
 | 
					// x.ScratchTotalMin    // 037 - 
 | 
				
			||||||
 | 
					// x.ScratchTotalStdDev // 038 - 
 | 
				
			||||||
 | 
					// x.SumOfDefectsAvg    // 039 - Average Sum of Defects
 | 
				
			||||||
 | 
					// x.SumOfDefectsMax    // 040 - Max Sum of Defects
 | 
				
			||||||
 | 
					// x.SumOfDefectsMin    // 041 - Min Sum of Defects
 | 
				
			||||||
 | 
					// x.SumOfDefectsStdDev // 042 - SumOfDefectsStdDev
 | 
				
			||||||
 | 
					// logistics.MesEntity  // 043 - 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// T:\met08ddupsp1tbi\06_SourceCode\met08ddupsp1tbi\Adaptation\FileHandlers\OpenInsight\FileRead.cs
 | 
				
			||||||
 | 
					// x.DcnLpdMin         // 001 - 
 | 
				
			||||||
 | 
					// x.DcnLpdMax         // 002 - 
 | 
				
			||||||
 | 
					// x.DcnLpdMean        // 003 - DCN LPD
 | 
				
			||||||
 | 
					// x.DcnAreaCountMin   // 004 - 
 | 
				
			||||||
 | 
					// x.DcnAreaCountMax   // 005 - 
 | 
				
			||||||
 | 
					// x.DcnAreaCountMean  // 006 - DCN Area
 | 
				
			||||||
 | 
					// x.DcnAreaMin        // 007 - 
 | 
				
			||||||
 | 
					// x.DcnAreaMax        // 008 - 
 | 
				
			||||||
 | 
					// x.Date              // 009 - 
 | 
				
			||||||
 | 
					// x.DcnHazeAvgMean    // 010 - Haze Average
 | 
				
			||||||
 | 
					// string.Empty        // 011 - 
 | 
				
			||||||
 | 
					// string.Empty        // 012 - 
 | 
				
			||||||
 | 
					// string.Empty        // 013 - 
 | 
				
			||||||
 | 
					// string.Empty        // 014 - 
 | 
				
			||||||
 | 
					// string.Empty        // 015 - 
 | 
				
			||||||
 | 
					// string.Empty        // 016 - 
 | 
				
			||||||
 | 
					// string.Empty        // 017 - 
 | 
				
			||||||
 | 
					// string.Empty        // 018 - 
 | 
				
			||||||
 | 
					// string.Empty        // 019 - 
 | 
				
			||||||
 | 
					// string.Empty        // 020 - 
 | 
				
			||||||
 | 
					// string.Empty        // 021 - 
 | 
				
			||||||
 | 
					// string.Empty        // 022 - 
 | 
				
			||||||
 | 
					// string.Empty        // 023 - 
 | 
				
			||||||
 | 
					// string.Empty        // 024 - 
 | 
				
			||||||
 | 
					// string.Empty        // 025 - 
 | 
				
			||||||
 | 
					// string.Empty        // 026 - 
 | 
				
			||||||
 | 
					// string.Empty        // 027 - 
 | 
				
			||||||
 | 
					// x.RDS               // 028 - Lot
 | 
				
			||||||
 | 
					// x.Reactor           // 029 - Process
 | 
				
			||||||
 | 
					// x.Recipe            // 030 - Part
 | 
				
			||||||
 | 
					// x.DcnScrMean        // 031 - Scratch Count
 | 
				
			||||||
 | 
					// string.Empty        // 032 - 
 | 
				
			||||||
 | 
					// string.Empty        // 033 - 
 | 
				
			||||||
 | 
					// string.Empty        // 034 - 
 | 
				
			||||||
 | 
					// x.DcnMicroScrMean   // 035 - Scratch Length
 | 
				
			||||||
 | 
					// string.Empty        // 036 - 
 | 
				
			||||||
 | 
					// string.Empty        // 037 - 
 | 
				
			||||||
 | 
					// string.Empty        // 038 - 
 | 
				
			||||||
 | 
					// x.DcnAllMean        // 039 - Average Sum of Defects
 | 
				
			||||||
 | 
					// x.DcnAllMax         // 040 - Max Sum of defects
 | 
				
			||||||
 | 
					// x.DcnAllMin         // 041 - Min Sum of Defects
 | 
				
			||||||
 | 
					// string.Empty        // 042 - 
 | 
				
			||||||
 | 
					// logistics.MesEntity // 043 - 
 | 
				
			||||||
 | 
					// x.DcnAreaMean       // 044 - DCN MM2
 | 
				
			||||||
							
								
								
									
										280
									
								
								.vscode/.vba
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										280
									
								
								.vscode/.vba
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,280 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service SetJsonFromProcessDataStandardFormat(DataPath, FileName)
 | 
				
			||||||
 | 
						OSREAD Text FROM DataPath:FileName THEN
 | 
				
			||||||
 | 
							Records = 0;
 | 
				
			||||||
 | 
							Sequence = -1;
 | 
				
			||||||
 | 
							HeaderId = -1;
 | 
				
			||||||
 | 
							SubgroupId = -1;
 | 
				
			||||||
 | 
							ColumnTitlesLine = 0;
 | 
				
			||||||
 | 
							FoundEndOfFile = False$;
 | 
				
			||||||
 | 
							json = '{ "Records": [':@FM;
 | 
				
			||||||
 | 
							SWAP '|' WITH @VM IN Text;
 | 
				
			||||||
 | 
							SWAP CRLF$ WITH @FM IN Text;
 | 
				
			||||||
 | 
							ColumnTitlesIndexCount = 0;
 | 
				
			||||||
 | 
							LineCount = DCOUNT(Text, @FM);
 | 
				
			||||||
 | 
							FOR LineLoopIndex = 1 TO LineCount
 | 
				
			||||||
 | 
								Line = Text<LineLoopIndex>;
 | 
				
			||||||
 | 
								IF FoundEndOfFile = True$ THEN
 | 
				
			||||||
 | 
									IF Line<1, 1> = 'END_OFFSET' THEN
 | 
				
			||||||
 | 
										ColumnTitlesLine = LineLoopIndex + 2;
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
 | 
									IF ColumnTitlesLine GT 0 THEN
 | 
				
			||||||
 | 
										Row = '{';
 | 
				
			||||||
 | 
										SegmentsCount = DCOUNT(Line, @VM);
 | 
				
			||||||
 | 
										IF ColumnTitlesIndexCount EQ 0 THEN
 | 
				
			||||||
 | 
											FOR SegmentLoopIndex = 1 TO SegmentsCount
 | 
				
			||||||
 | 
												IF SegmentLoopIndex = ColumnTitlesLine THEN
 | 
				
			||||||
 | 
													ColumnTitlesIndexCount = SegmentsCount - 2;
 | 
				
			||||||
 | 
												END
 | 
				
			||||||
 | 
											NEXT SegmentLoopIndex
 | 
				
			||||||
 | 
										END
 | 
				
			||||||
 | 
										IF ColumnTitlesIndexCount GT 0 AND SegmentsCount = ColumnTitlesIndexCount THEN
 | 
				
			||||||
 | 
											FOR SegmentLoopIndex = 1 TO SegmentsCount
 | 
				
			||||||
 | 
												Value = SRP_String('Trim', Line<1,SegmentLoopIndex>, 'FB');
 | 
				
			||||||
 | 
												swap '"' with '\"' in Value;
 | 
				
			||||||
 | 
												swap '\' with '\\' in Value;
 | 
				
			||||||
 | 
												Column = Text<ColumnTitlesLine,SegmentLoopIndex + 1>;
 | 
				
			||||||
 | 
												IF Column[1,1] = '"' AND Column[-1,1] = '"' THEN
 | 
				
			||||||
 | 
													Column = Column[2,LEN(Column) - 2];
 | 
				
			||||||
 | 
												END
 | 
				
			||||||
 | 
												Row = Row:'"':Column:'":"':Value:'",';
 | 
				
			||||||
 | 
											NEXT SegmentLoopIndex
 | 
				
			||||||
 | 
											Row = SRP_String('Trim', Row, 'B', ','):'},':@FM;
 | 
				
			||||||
 | 
											json = json:Row;
 | 
				
			||||||
 | 
											Records = Records + 1;
 | 
				
			||||||
 | 
										END
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
 | 
								END
 | 
				
			||||||
 | 
								IF Line = 'EOF' THEN
 | 
				
			||||||
 | 
									FoundEndOfFile = True$;
 | 
				
			||||||
 | 
									Line = Text<LineLoopIndex - 1>;
 | 
				
			||||||
 | 
									Convert Tab$ to @FM IN Line
 | 
				
			||||||
 | 
									SWAP '=' WITH @VM IN Line;
 | 
				
			||||||
 | 
									SWAP ';' WITH @FM IN Line;
 | 
				
			||||||
 | 
									IF Line<2, 1> = 'B_HeaderId' THEN
 | 
				
			||||||
 | 
										HeaderId = Line<2, 2>
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
 | 
									IF Line<3, 1> = 'B_SubgroupId' THEN
 | 
				
			||||||
 | 
										SubgroupId = Line<3, 2>
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
 | 
									IF Line<14, 1> = 'B_SEQUENCE' THEN
 | 
				
			||||||
 | 
										Sequence = Line<14, 2>
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
 | 
					 			END
 | 
				
			||||||
 | 
							NEXT LineLoopIndex
 | 
				
			||||||
 | 
							IF ColumnTitlesLine GT 0 AND ColumnTitlesIndexCount GT 0 THEN
 | 
				
			||||||
 | 
								json = SRP_String('Trim', json, 'B', @FM);
 | 
				
			||||||
 | 
								json = SRP_String('Trim', json, 'B', ',');
 | 
				
			||||||
 | 
								json = json:@FM:']':@FM:',"Sequence":':Sequence:',"HeaderId":':HeaderId:',"SubgroupId":':SubgroupId:',"Count":':Records:'}';
 | 
				
			||||||
 | 
								SWAP @FM WITH CRLF$ IN json;
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							IF LEN(json) GT 0 THEN
 | 
				
			||||||
 | 
								set_status(0);
 | 
				
			||||||
 | 
								OSWRITE json to DataPath:FileName:'.json'
 | 
				
			||||||
 | 
								StatusCode = '';
 | 
				
			||||||
 | 
								If Get_Status(StatusCode) THEN
 | 
				
			||||||
 | 
									ErrorMessage = 'Error writing run data file to repository: StatusCode = ' : StatusCode;
 | 
				
			||||||
 | 
									Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage);
 | 
				
			||||||
 | 
									Set_Status(0);
 | 
				
			||||||
 | 
								END
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
						END ELSE
 | 
				
			||||||
 | 
							json = '';
 | 
				
			||||||
 | 
						END
 | 
				
			||||||
 | 
					    Response = json;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetStratus(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportStratusData(
 | 
				
			||||||
 | 
						Offset = 1
 | 
				
			||||||
 | 
						FieldPosition = 13
 | 
				
			||||||
 | 
						FieldPositionIncrement = 2
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // Timestamp
 | 
				
			||||||
 | 
								Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // Tool
 | 
				
			||||||
 | 
								Result<4> = 'FQA Thickness'; // DataType
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Employee'); // Operator
 | 
				
			||||||
 | 
								Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // Recipe
 | 
				
			||||||
 | 
								Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // Reactor
 | 
				
			||||||
 | 
								Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSNo
 | 
				
			||||||
 | 
								Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
 | 
				
			||||||
 | 
								Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Batch'); // BatchID
 | 
				
			||||||
 | 
								Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Cassette'); // Cassette
 | 
				
			||||||
 | 
								Result<12> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']GradeMean'); // ThickAvg
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Slot'); // Position
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Mean'); // DataPoint
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetBioRadEPPFQA(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportBioRadEPPFQAData(
 | 
				
			||||||
 | 
						Offset = 1
 | 
				
			||||||
 | 
						FieldPosition = 13
 | 
				
			||||||
 | 
						FieldPositionIncrement = 1
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // Timestamp
 | 
				
			||||||
 | 
								Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // ScanRecipe
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
 | 
				
			||||||
 | 
								Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // WMOKeyID
 | 
				
			||||||
 | 
								Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Position'); // Position
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Thickness'); // DataPoint
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetBioRad(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportBioRadData(
 | 
				
			||||||
 | 
						Offset = 1
 | 
				
			||||||
 | 
						FieldPosition = 13
 | 
				
			||||||
 | 
						FieldPositionIncrement = 2
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DateTime'); // TimeStamp
 | 
				
			||||||
 | 
								Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Recipe'); // ScanRecipe
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ToolID
 | 
				
			||||||
 | 
								Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
 | 
				
			||||||
 | 
								Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
 | 
				
			||||||
 | 
								Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
 | 
				
			||||||
 | 
								Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Zone'); // RunDataZone
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Position'); // Position
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Thickness'); // DataPoint
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetCDE(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportCDEData(
 | 
				
			||||||
 | 
						Offset = 3
 | 
				
			||||||
 | 
						FieldPosition = 23
 | 
				
			||||||
 | 
						FieldPositionIncrement = 5
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RecipeName'); // ScanRecip
 | 
				
			||||||
 | 
								Result<6> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
 | 
				
			||||||
 | 
								Result<7> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
 | 
				
			||||||
 | 
								Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
 | 
				
			||||||
 | 
								Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Layer'); // RunDataLayer
 | 
				
			||||||
 | 
								Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Zone'); // RunDataZo
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']InferredPoint'); // Position
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Data'); // DataPoint
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + FieldPositionIncrement - 1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MeritGOF'); // N/A
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetHgCV(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportHgCVData(
 | 
				
			||||||
 | 
						Offset = 5
 | 
				
			||||||
 | 
						PhaseOffset = 7
 | 
				
			||||||
 | 
						FieldPosition = 53
 | 
				
			||||||
 | 
						FieldPositionIncrement = 9
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ToolID
 | 
				
			||||||
 | 
								Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Reactor'); // ReactorID
 | 
				
			||||||
 | 
								Result<4> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
 | 
				
			||||||
 | 
								Result<5> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']PSN'); // PSN
 | 
				
			||||||
 | 
								Result<8> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Wafer'); // LayerZonePair
 | 
				
			||||||
 | 
								Result<11> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
							ForOffset = (RecordIndex - 1) * FieldPositionIncrement;
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Site'); // Position
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + Offset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RhoAvg'); // HgCVDataPoint
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + PhaseOffset> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Phase'); // PhaseDataPoint
 | 
				
			||||||
 | 
							Result<FieldPosition + ForOffset + FieldPositionIncrement - 1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Grade'); // N/A
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetTencor(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportTencorData(
 | 
				
			||||||
 | 
						Result<1, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<1, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<1, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<1, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<1, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
 | 
				
			||||||
 | 
								Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']HazeAverageAvg'); // HazeAvg
 | 
				
			||||||
 | 
								Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
 | 
				
			||||||
 | 
								Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']WaferRecipe'); // ScanRecipe
 | 
				
			||||||
 | 
								Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsAvg'); // SoDAvg
 | 
				
			||||||
 | 
								Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsMax'); // SoDMax
 | 
				
			||||||
 | 
								Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']SumOfDefectsMin'); // SoDMin
 | 
				
			||||||
 | 
								Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ScanTool
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetSP1(Handle)
 | 
				
			||||||
 | 
						Result = ''; // Service ImportSP1Data(
 | 
				
			||||||
 | 
						Result<5, 1> = SRP_JSON(Handle, 'GETVALUE', 'Count');
 | 
				
			||||||
 | 
						Result<5, 2> = SRP_JSON(Handle, 'GETVALUE', 'Sequence');
 | 
				
			||||||
 | 
						Result<5, 3> = SRP_JSON(Handle, 'GETVALUE', 'HeaderId');
 | 
				
			||||||
 | 
						Result<5, 4> = SRP_JSON(Handle, 'GETVALUE', 'SubgroupId');
 | 
				
			||||||
 | 
						FOR RecordIndex = 1 TO Result<5, 1>
 | 
				
			||||||
 | 
							IF RecordIndex = 1 THEN
 | 
				
			||||||
 | 
								Result<9> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Date'); // Timestamp
 | 
				
			||||||
 | 
								Result<10> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnHazeAvgMean'); // HazeAvg
 | 
				
			||||||
 | 
								Result<28> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']RDS'); // RDSKeyID
 | 
				
			||||||
 | 
								Result<30> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']Session'); // ScanRecipe
 | 
				
			||||||
 | 
								IsMisfit = IndexC(Result<30>, 'MISFIT', 1)
 | 
				
			||||||
 | 
								IF IsMisfit THEN
 | 
				
			||||||
 | 
									Result<3> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMean'); // SoDAvg
 | 
				
			||||||
 | 
									Result<2> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMax'); // SoDMax
 | 
				
			||||||
 | 
									Result<1> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMin'); // SoDMin
 | 
				
			||||||
 | 
								END ELSE
 | 
				
			||||||
 | 
									Result<39> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMean'); // SoDAvg
 | 
				
			||||||
 | 
									Result<40> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMax'); // SoDMax
 | 
				
			||||||
 | 
									Result<41> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAllMin'); // SoDMin
 | 
				
			||||||
 | 
								END
 | 
				
			||||||
 | 
								Result<43> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']MesEntity'); // ScanTool
 | 
				
			||||||
 | 
								Result<44> = SRP_JSON(Handle, 'GETVALUE', 'Records[':RecordIndex:']DcnAreaMean'); // DCNMM2
 | 
				
			||||||
 | 
							END
 | 
				
			||||||
 | 
						NEXT RecordIndex
 | 
				
			||||||
 | 
					    Response = Result;
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
							
								
								
									
										50
									
								
								.vscode/638810565835457504/1745485161 SP101 666335 2025-04-24 01-56-23.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								.vscode/638810565835457504/1745485161 SP101 666335 2025-04-24 01-56-23.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					0	0	0.000	1	12	4.320	0.064	1.176	4/24/2025 1:56:23 AM	0.622																		666335	55	6IN_SLIP	0.000				NA				4.440	12	1		SP101	0.357	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1 | 2 | 3 | 4 | 5  | 6    | 7     | 8     | 9                    | 10    | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28     | 29 | 30       | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39   | 40 | 41 | 42 | 43    | 44    |
 | 
				
			||||||
 | 
					|---|---|---|---|----|------|-------|-------|----------------------|-------|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|--------|----|----------|----|----|----|----|----|----|----|----|------|----|----|----|-------|-------|
 | 
				
			||||||
 | 
					| 0 | 0 | 0 | 1 | 12 | 4.32 | 0.064 | 1.176 | 4/24/2025 1:56:23 AM | 0.622 |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    | 666335 | 55 | 6IN_SLIP | 0  |    |    |    | NA |    |    |    | 4.44 | 12 | 1  |    | SP101 | 0.357 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:0
 | 
				
			||||||
 | 
					<2>:0
 | 
				
			||||||
 | 
					<3>:0
 | 
				
			||||||
 | 
					<4>:1
 | 
				
			||||||
 | 
					<5>:12
 | 
				
			||||||
 | 
					<6>:4.32
 | 
				
			||||||
 | 
					<7>:0.064
 | 
				
			||||||
 | 
					<8>:1.176
 | 
				
			||||||
 | 
					<9>:4/24/2025 1:56:23 AM
 | 
				
			||||||
 | 
					<10>:0.622
 | 
				
			||||||
 | 
					<11>:
 | 
				
			||||||
 | 
					<12>:
 | 
				
			||||||
 | 
					<13>:
 | 
				
			||||||
 | 
					<14>:
 | 
				
			||||||
 | 
					<15>:
 | 
				
			||||||
 | 
					<16>:
 | 
				
			||||||
 | 
					<17>:
 | 
				
			||||||
 | 
					<18>:
 | 
				
			||||||
 | 
					<19>:
 | 
				
			||||||
 | 
					<20>:
 | 
				
			||||||
 | 
					<21>:
 | 
				
			||||||
 | 
					<22>:
 | 
				
			||||||
 | 
					<23>:
 | 
				
			||||||
 | 
					<24>:
 | 
				
			||||||
 | 
					<25>:
 | 
				
			||||||
 | 
					<26>:
 | 
				
			||||||
 | 
					<27>:
 | 
				
			||||||
 | 
					<28>:666335
 | 
				
			||||||
 | 
					<29>:55
 | 
				
			||||||
 | 
					<30>:6IN_SLIP
 | 
				
			||||||
 | 
					<31>:0
 | 
				
			||||||
 | 
					<32>:
 | 
				
			||||||
 | 
					<33>:
 | 
				
			||||||
 | 
					<34>:
 | 
				
			||||||
 | 
					<35>:NA
 | 
				
			||||||
 | 
					<36>:
 | 
				
			||||||
 | 
					<37>:
 | 
				
			||||||
 | 
					<38>:
 | 
				
			||||||
 | 
					<39>:4.44
 | 
				
			||||||
 | 
					<40>:12
 | 
				
			||||||
 | 
					<41>:1
 | 
				
			||||||
 | 
					<42>:
 | 
				
			||||||
 | 
					<43>:SP101
 | 
				
			||||||
 | 
					<44>:0.357
 | 
				
			||||||
							
								
								
									
										1982
									
								
								.vscode/638810565835457504/SP101_250424015623000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1982
									
								
								.vscode/638810565835457504/SP101_250424015623000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										87
									
								
								.vscode/638810565835457504/SP101_250424015623000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								.vscode/638810565835457504/SP101_250424015623000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"Grade"	"HeaderUniqueId"	"RDS"	"Session"	"Side"	"SrcDest"	"UniqueId"	"WaferID"	"DcnAllMax"	"DcnAllMean"	"DcnAllMin"	"DcnAllStdDev"	"DcnAreaCountMax"	"DcnAreaCountMean"	"DcnAreaCountMin"	"DcnAreaCountStdDev"	"DcnAreaMax"	"DcnAreaMean"	"DcnAreaMin"	"DcnAreaStdDev"	"DcnBin1Max"	"DcnBin1Mean"	"DcnBin1Min"	"DcnBin1StdDev"	"DcnBin2Max"	"DcnBin2Mean"	"DcnBin2Min"	"DcnBin2StdDev"	"DcnBin3Max"	"DcnBin3Mean"	"DcnBin3Min"	"DcnBin3StdDev"	"DcnBin4Max"	"DcnBin4Mean"	"DcnBin4Min"	"DcnBin4StdDev"	"DcnBin5Max"	"DcnBin5Mean"	"DcnBin5Min"	"DcnBin5StdDev"	"DcnBin6Max"	"DcnBin6Mean"	"DcnBin6Min"	"DcnBin6StdDev"	"DcnBin7Max"	"DcnBin7Mean"	"DcnBin7Min"	"DcnBin7StdDev"	"DcnBin8Max"	"DcnBin8Mean"	"DcnBin8Min"	"DcnBin8StdDev"	"DcnHazeAvgMax"	"DcnHazeAvgMean"	"DcnHazeAvgMin"	"DcnHazeAvgStdDev"	"DcnHazeMedianMax"	"DcnHazeMedianMean"	"DcnHazeMedianMin"	"DcnHazeMedianStdDev"	"DcnHazeStdDevMax"	"DcnHazeStdDevMean"	"DcnHazeStdDevMin"	"DcnHazeStdDevStdDev"	"DcnLpdESMax"	"DcnLpdESMean"	"DcnLpdESMin"	"DcnLpdESStdDev"	"DcnLpdMax"	"DcnLpdMean"	"DcnLpdMin"	"DcnLpdNMax"	"DcnLpdNMean"	"DcnLpdNMin"	"DcnLpdNStdDev"	"DcnLpdStdDev"	"DcnMicroScrMax"	"DcnMicroScrMean"	"DcnMicroScrMin"	"DcnMicroScrStdDev"	"DcnScrMax"	"DcnScrMean"	"DcnScrMin"	"DcnScrStdDev"	"DcnSlipMax"	"DcnSlipMean"	"DcnSlipMin"	"DcnSlipStdDev"	"DnnAllMax"	"DnnAllMean"	"DnnAllMin"	"DnnAllStdDev"	"DnnAreaCountMax"	"DnnAreaCountMean"	"DnnAreaCountMin"	"DnnAreaCountStdDev"	"DnnAreaMax"	"DnnAreaMean"	"DnnAreaMin"	"DnnAreaStdDev"	"DnnBin1Max"	"DnnBin1Mean"	"DnnBin1Min"	"DnnBin1StdDev"	"DnnBin2Max"	"DnnBin2Mean"	"DnnBin2Min"	"DnnBin2StdDev"	"DnnBin3Max"	"DnnBin3Mean"	"DnnBin3Min"	"DnnBin3StdDev"	"DnnBin4Max"	"DnnBin4Mean"	"DnnBin4Min"	"DnnBin4StdDev"	"DnnBin5Max"	"DnnBin5Mean"	"DnnBin5Min"	"DnnBin5StdDev"	"DnnBin6Max"	"DnnBin6Mean"	"DnnBin6Min"	"DnnBin6StdDev"	"DnnBin7Max"	"DnnBin7Mean"	"DnnBin7Min"	"DnnBin7StdDev"	"DnnBin8Max"	"DnnBin8Mean"	"DnnBin8Min"	"DnnBin8StdDev"	"DnnHazeAvgMax"	"DnnHazeAvgMean"	"DnnHazeAvgMin"	"DnnHazeAvgStdDev"	"DnnHazeMedianMax"	"DnnHazeMedianMean"	"DnnHazeMedianMin"	"DnnHazeMedianStdDev"	"DnnHazeStdDevMax"	"DnnHazeStdDevMean"	"DnnHazeStdDevMin"	"DnnHazeStdDevStdDev"	"DnnLpdESMax"	"DnnLpdESMean"	"DnnLpdESMin"	"DnnLpdESStdDev"	"DnnLpdMax"	"DnnLpdMean"	"DnnLpdMin"	"DnnLpdNMax"	"DnnLpdNMean"	"DnnLpdNMin"	"DnnLpdNStdDev"	"DnnLpdStdDev"	"DnnMicroScrMax"	"DnnMicroScrMean"	"DnnMicroScrMin"	"DnnMicroScrStdDev"	"DnnScrMax"	"DnnScrMean"	"DnnScrMin"	"DnnScrStdDev"	"DnnSlipMax"	"DnnSlipMean"	"DnnSlipMin"	"DnnSlipStdDev"	"DwnAllMax"	"DwnAllMean"	"DwnAllMin"	"DwnAllStdDev"	"DwnAreaCountMax"	"DwnAreaCountMean"	"DwnAreaCountMin"	"DwnAreaCountStdDev"	"DwnAreaMax"	"DwnAreaMean"	"DwnAreaMin"	"DwnAreaStdDev"	"DwnBin1Max"	"DwnBin1Mean"	"DwnBin1Min"	"DwnBin1StdDev"	"DwnBin2Max"	"DwnBin2Mean"	"DwnBin2Min"	"DwnBin2StdDev"	"DwnBin3Max"	"DwnBin3Mean"	"DwnBin3Min"	"DwnBin3StdDev"	"DwnBin4Max"	"DwnBin4Mean"	"DwnBin4Min"	"DwnBin4StdDev"	"DwnBin5Max"	"DwnBin5Mean"	"DwnBin5Min"	"DwnBin5StdDev"	"DwnBin6Max"	"DwnBin6Mean"	"DwnBin6Min"	"DwnBin6StdDev"	"DwnBin7Max"	"DwnBin7Mean"	"DwnBin7Min"	"DwnBin7StdDev"	"DwnBin8Max"	"DwnBin8Mean"	"DwnBin8Min"	"DwnBin8StdDev"	"DwnHazeAvgMax"	"DwnHazeAvgMean"	"DwnHazeAvgMin"	"DwnHazeAvgStdDev"	"DwnHazeMedianMax"	"DwnHazeMedianMean"	"DwnHazeMedianMin"	"DwnHazeMedianStdDev"	"DwnHazeStdDevMax"	"DwnHazeStdDevMean"	"DwnHazeStdDevMin"	"DwnHazeStdDevStdDev"	"DwnLpdESMax"	"DwnLpdESMean"	"DwnLpdESMin"	"DwnLpdESStdDev"	"DwnLpdMax"	"DwnLpdMean"	"DwnLpdMin"	"DwnLpdNMax"	"DwnLpdNMean"	"DwnLpdNMin"	"DwnLpdNStdDev"	"DwnLpdStdDev"	"DwnMicroScrMax"	"DwnMicroScrMean"	"DwnMicroScrMin"	"DwnMicroScrStdDev"	"DwnScrMax"	"DwnScrMean"	"DwnScrMin"	"DwnScrStdDev"	"DwnSlipMax"	"DwnSlipMean"	"DwnSlipMin"	"DwnSlipStdDev"	"DcnAll"	"DcnArea"	"DcnAreaCount"	"DcnBin1"	"DcnBin2"	"DcnBin3"	"DcnBin4"	"DcnBin5"	"DcnBin6"	"DcnBin7"	"DcnBin8"	"DcnHazeAvg"	"DcnHazeMedian"	"DcnHazeStdDev"	"DcnLpd"	"DcnLpdES"	"DcnLpdN"	"DcnMicroScr"	"DcnScr"	"DcnSlip"	"DnnAll"	"DnnArea"	"DnnAreaCount"	"DnnBin1"	"DnnBin2"	"DnnBin3"	"DnnBin4"	"DnnBin5"	"DnnBin6"	"DnnBin7"	"DnnBin8"	"DnnHazeAvg"	"DnnHazeMedian"	"DnnHazeStdDev"	"DnnLpd"	"DnnLpdES"	"DnnLpdN"	"DnnMicroScr"	"DnnScr"	"DnnSlip"	"DwnAll"	"DwnArea"	"DwnAreaCount"	"DwnBin1"	"DwnBin2"	"DwnBin3"	"DwnBin4"	"DwnBin5"	"DwnBin6"	"DwnBin7"	"DwnBin8"	"DwnHazeAvg"	"DwnHazeMedian"	"DwnHazeStdDev"	"DwnLpd"	"DwnLpdES"	"DwnLpdN"	"DwnMicroScr"	"DwnScr"	"DwnSlip"
 | 
				
			||||||
 | 
					0.00	1	2	8	25	0	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/1-2/1	UniqueId	1	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.230	2	0	0	0	0	0	0	0	0	0.640	0.636	0.061	0	NA	NA	NA	0	0.000		0.155	4	0	0	0	0	0	0	0	0	0.448	0.443	0.028	0	NA	NA	NA	NA	NA		0.000	0	0	0	0	0	0	0	0	0	0.192	0.179	0.066	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	1	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/2-2/2	UniqueId	2	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.064	2	0	0	0	0	0	0	0	0	0.644	0.636	0.058	0	NA	NA	NA	0	0.581		0.073	4	0	0	0	0	0	0	0	0	0.459	0.456	0.024	0	NA	NA	NA	NA	NA		0.000	0	0	0	0	0	0	0	0	0	0.185	0.169	0.062	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	2	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/3-2/3	UniqueId	3	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.345	7	0	0	0	0	0	0	0	0	0.615	0.601	0.070	0	NA	NA	NA	0	0.000		0.284	9	0	0	0	0	0	0	0	0	0.449	0.447	0.017	0	NA	NA	NA	NA	NA		0.000	4	0	0	0	0	0	0	0	0	0.165	0.145	0.068	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	3	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/4-2/4	UniqueId	4	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.284	4	0	0	0	0	0	0	0	0	0.631	0.625	0.065	0	NA	NA	NA	0	0.000		0.192	4	0	0	0	0	0	0	0	0	0.450	0.448	0.026	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.181	0.166	0.062	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	4	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/5-2/5	UniqueId	5	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.298	2	0	0	0	0	0	0	0	0	0.624	0.612	0.065	0	NA	NA	NA	0	0.000		0.202	2	0	0	0	0	0	0	0	0	0.453	0.452	0.026	0	NA	NA	NA	NA	NA		0.028	2	0	0	0	0	0	0	0	0	0.170	0.153	0.061	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	5	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/6-2/6	UniqueId	6	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.119	1	0	0	0	0	0	0	0	0	0.650	0.641	0.060	0	NA	NA	NA	0	0.000		0.083	1	0	0	0	0	0	0	0	0	0.468	0.467	0.027	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.182	0.166	0.066	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	6	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/7-2/7	UniqueId	7	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.293	5	0	0	0	0	0	0	0	0	0.660	0.645	0.072	0	NA	NA	NA	0	0.000		0.222	5	0	0	0	0	0	0	0	0	0.477	0.476	0.018	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.182	0.164	0.072	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	7	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/8-2/8	UniqueId	8	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.530	5	0	0	0	0	0	0	0	0	0.608	0.596	0.059	0	NA	NA	NA	0	0.000		0.309	7	0	0	0	0	0	0	0	0	0.442	0.437	0.030	0	NA	NA	NA	NA	NA		0.024	3	0	0	0	0	0	0	0	0	0.167	0.145	0.065	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	8	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/9-2/9	UniqueId	9	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.138	3	0	0	0	0	0	0	0	0	0.607	0.598	0.086	0	NA	NA	NA	0	0.000		0.113	3	0	0	0	0	0	0	0	0	0.448	0.444	0.043	0	NA	NA	NA	NA	NA		0.000	0	0	0	0	0	0	0	0	0	0.160	0.147	0.065	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	9	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/10-2/10	UniqueId	10	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.501	5	0	0	0	0	0	0	0	0	0.627	0.618	0.060	0	NA	NA	NA	0	0.000		0.347	5	0	0	0	0	0	0	0	0	0.459	0.453	0.027	0	NA	NA	NA	NA	NA		0.021	2	0	0	0	0	0	0	0	0	0.169	0.154	0.066	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	10	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/11-2/11	UniqueId	11	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.498	7	0	0	0	0	0	0	0	0	0.611	0.604	0.057	0	NA	NA	NA	0	0.000		0.342	7	0	0	0	0	0	0	0	0	0.461	0.461	0.020	0	NA	NA	NA	NA	NA		0.022	3	0	0	0	0	0	0	0	0	0.151	0.137	0.061	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	11	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/12-2/12	UniqueId	12	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.311	3	0	0	0	0	0	0	0	0	0.617	0.608	0.059	0	NA	NA	NA	0	0.000		0.197	3	0	0	0	0	0	0	0	0	0.448	0.444	0.022	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.169	0.156	0.062	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	12	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/13-2/13	UniqueId	13	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.254	4	0	0	0	0	0	0	0	0	0.623	0.619	0.059	0	NA	NA	NA	0	0.000		0.191	4	0	0	0	0	0	0	0	0	0.461	0.458	0.023	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.162	0.153	0.057	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	13	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/14-2/14	UniqueId	14	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.445	5	0	0	0	0	0	0	0	0	0.622	0.615	0.057	0	NA	NA	NA	0	0.000		0.316	5	0	0	0	0	0	0	0	0	0.444	0.440	0.025	0	NA	NA	NA	NA	NA		0.000	2	0	0	0	0	0	0	0	0	0.178	0.168	0.064	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	14	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/15-2/15	UniqueId	15	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.285	2	0	0	0	0	0	0	0	0	0.609	0.602	0.058	0	NA	NA	NA	0	0.000		0.190	3	0	0	0	0	0	0	0	0	0.425	0.418	0.027	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.184	0.172	0.062	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	15	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/16-2/16	UniqueId	16	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.845	6	0	0	0	0	0	0	0	0	0.604	0.604	0.057	0	NA	NA	NA	0	0.000		0.547	6	0	0	0	0	0	0	0	0	0.426	0.423	0.024	0	NA	NA	NA	NA	NA		0.026	3	0	0	0	0	0	0	0	0	0.178	0.170	0.063	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	16	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/17-2/17	UniqueId	17	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.148	3	0	0	0	0	0	0	0	0	0.625	0.623	0.053	0	NA	NA	NA	0	0.000		0.111	3	0	0	0	0	0	0	0	0	0.432	0.430	0.022	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.193	0.188	0.060	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	17	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/18-2/18	UniqueId	18	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.467	5	0	0	0	0	0	0	0	0	0.638	0.635	0.048	0	NA	NA	NA	0	0.000		0.308	5	0	0	0	0	0	0	0	0	0.439	0.436	0.021	0	NA	NA	NA	NA	NA		0.000	3	0	0	0	0	0	0	0	0	0.199	0.191	0.053	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	18	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/19-2/19	UniqueId	19	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.282	6	0	0	0	0	0	0	0	0	0.624	0.622	0.050	0	NA	NA	NA	0	0.000		0.247	6	0	0	0	0	0	0	0	0	0.423	0.416	0.027	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.201	0.193	0.058	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	19	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/20-2/20	UniqueId	20	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		1.176	12	0	0	0	0	0	0	0	0	0.619	0.617	0.054	0	NA	NA	NA	0	0.000		0.786	14	0	0	0	0	0	0	0	0	0.411	0.408	0.026	0	NA	NA	NA	NA	NA		0.000	3	0	0	0	0	0	0	0	0	0.208	0.198	0.061	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	20	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/21-2/21	UniqueId	21	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.170	3	0	0	0	0	0	0	0	0	0.589	0.584	0.064	0	NA	NA	NA	0	0.000		0.135	3	0	0	0	0	0	0	0	0	0.416	0.416	0.023	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.173	0.165	0.067	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	21	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/22-2/22	UniqueId	22	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.407	4	0	0	0	0	0	0	0	0	0.602	0.596	0.058	0	NA	NA	NA	0	0.000		0.269	4	0	0	0	0	0	0	0	0	0.422	0.418	0.027	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.181	0.167	0.066	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	22	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/23-2/23	UniqueId	23	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.516	4	0	0	0	0	0	0	0	0	0.609	0.603	0.063	0	NA	NA	NA	0	0.000		0.319	4	0	0	0	0	0	0	0	0	0.415	0.413	0.024	0	NA	NA	NA	NA	NA		0.000	1	0	0	0	0	0	0	0	0	0.194	0.181	0.058	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	23	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/24-2/24	UniqueId	24	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.180	4	0	0	0	0	0	0	0	0	0.614	0.606	0.067	0	NA	NA	NA	0	1.732		0.178	6	0	0	0	0	0	0	0	0	0.418	0.415	0.023	0	NA	NA	NA	NA	NA		0.000	2	0	0	0	0	0	0	0	0	0.196	0.179	0.060	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					0.00	1	2	8	25	24	SP101	4/24/2025 1:56:23 AM		666335	5113	55	6IN_SLIP	Grade1	HeaderUniqueId	666335	6IN_SLIP	F	2/25-2/25	UniqueId	25	12	4.440	1	2.238	12	4.320	1	2.249	1.176	0.357	0.064	0.243	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.660	0.622	0.589	0.016	0.645	0.615	0.584	0.016	0.278	0.070	0.048	0.044	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	0	0.000	0	0.000	1.732	0.093	0.000	0.361	14	4.840	1	2.577	14	4.840	1	2.577	0.786	0.250	0.073	0.154	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.477	0.440	0.411	0.019	0.476	0.437	0.408	0.019	0.187	0.032	0.017	0.033	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	4	1.560	0	1.083	4	1.560	0	1.083	0.042	0.007	0.000	0.012	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0	0.000	0.218	0.182	0.151	0.016	0.200	0.168	0.137	0.017	0.108	0.065	0.053	0.010	NA	NA	NA	NA	0	0.000	0	NA	NA	NA	NA	0.000	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA	NA		0.152	4	0	0	0	0	0	0	0	0	0.633	0.622	0.278	0	NA	NA	NA	0	0.000		0.128	4	0	0	0	0	0	0	0	0	0.415	0.414	0.187	0	NA	NA	NA	NA	NA		0.042	1	0	0	0	0	0	0	0	0	0.218	0.200	0.108	0	NA	NA	NA	NA	NA
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000025
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000321
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/24/2025 01:56:23
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_BASIC_TYPE=;A_INFO=6IN_SLIP_20250424_0127_2025-04-24_01;56;37;581.txt.csv;A_INFO2=25;A_JOBID=SP101;A_MES_ENTITY=SP101;A_MID=55-666335-5113;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638810565835457504;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666335;B_NULL_DATA=;B_PPID=6IN_SLIP;B_PROCESS_JOBID=55;B_PRODUCT=5113;B_SEQUENCE=638810565835457504;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000037963
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000038659
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Lot|Session|DcnAllMin|DcnLpdMin|DcnLpdNMin|DcnLpdESMin|DcnMicroScrMin|DcnScrMin|DcnSlipMin|DcnAreaCountMin|DcnAreaMin|DcnHazeAvgMin|DcnHazeMedianMin|DcnHazeStdDevMin|DcnBin1Min|DcnBin2Min|DcnBin3Min|DcnBin4Min|DcnBin5Min|DcnBin6Min|DcnBin7Min|DcnBin8Min|DcnAllMax|DcnLpdMax|DcnLpdNMax|DcnLpdESMax|DcnMicroScrMax|DcnScrMax|DcnSlipMax|DcnAreaCountMax|DcnAreaMax|DcnHazeAvgMax|DcnHazeMedianMax|DcnHazeStdDevMax|DcnBin1Max|DcnBin2Max|DcnBin3Max|DcnBin4Max|DcnBin5Max|DcnBin6Max|DcnBin7Max|DcnBin8Max|DcnAllMean|DcnLpdMean|DcnLpdNMean|DcnLpdESMean|DcnMicroScrMean|DcnScrMean|DcnSlipMean|DcnAreaCountMean|DcnAreaMean|DcnHazeAvgMean|DcnHazeMedianMean|DcnHazeStdDevMean|DcnBin1Mean|DcnBin2Mean|DcnBin3Mean|DcnBin4Mean|DcnBin5Mean|DcnBin6Mean|DcnBin7Mean|DcnBin8Mean|DcnAllStdDev|DcnLpdStdDev|DcnLpdNStdDev|DcnLpdESStdDev|DcnMicroScrStdDev|DcnScrStdDev|DcnSlipStdDev|DcnAreaCountStdDev|DcnAreaStdDev|DcnHazeAvgStdDev|DcnHazeMedianStdDev|DcnHazeStdDevStdDev|DcnBin1StdDev|DcnBin2StdDev|DcnBin3StdDev|DcnBin4StdDev|DcnBin5StdDev|DcnBin6StdDev|DcnBin7StdDev|DcnBin8StdDev|DwnAllMin|DwnLpdMin|DwnLpdNMin|DwnLpdESMin|DwnMicroScrMin|DwnScrMin|DwnSlipMin|DwnAreaCountMin|DwnAreaMin|DwnHazeAvgMin|DwnHazeMedianMin|DwnHazeStdDevMin|DwnBin1Min|DwnBin2Min|DwnBin3Min|DwnBin4Min|DwnBin5Min|DwnBin6Min|DwnBin7Min|DwnBin8Min|DwnAllMax|DwnLpdMax|DwnLpdNMax|DwnLpdESMax|DwnMicroScrMax|DwnScrMax|DwnSlipMax|DwnAreaCountMax|DwnAreaMax|DwnHazeAvgMax|DwnHazeMedianMax|DwnHazeStdDevMax|DwnBin1Max|DwnBin2Max|DwnBin3Max|DwnBin4Max|DwnBin5Max|DwnBin6Max|DwnBin7Max|DwnBin8Max|DwnAllMean|DwnLpdMean|DwnLpdNMean|DwnLpdESMean|DwnMicroScrMean|DwnScrMean|DwnSlipMean|DwnAreaCountMean|DwnAreaMean|DwnHazeAvgMean|DwnHazeMedianMean|DwnHazeStdDevMean|DwnBin1Mean|DwnBin2Mean|DwnBin3Mean|DwnBin4Mean|DwnBin5Mean|DwnBin6Mean|DwnBin7Mean|DwnBin8Mean|DwnAllStdDev|DwnLpdStdDev|DwnLpdNStdDev|DwnLpdESStdDev|DwnMicroScrStdDev|DwnScrStdDev|DwnSlipStdDev|DwnAreaCountStdDev|DwnAreaStdDev|DwnHazeAvgStdDev|DwnHazeMedianStdDev|DwnHazeStdDevStdDev|DwnBin1StdDev|DwnBin2StdDev|DwnBin3StdDev|DwnBin4StdDev|DwnBin5StdDev|DwnBin6StdDev|DwnBin7StdDev|DwnBin8StdDev|DnnAllMin|DnnLpdMin|DnnLpdNMin|DnnLpdESMin|DnnMicroScrMin|DnnScrMin|DnnSlipMin|DnnAreaCountMin|DnnAreaMin|DnnHazeAvgMin|DnnHazeMedianMin|DnnHazeStdDevMin|DnnBin1Min|DnnBin2Min|DnnBin3Min|DnnBin4Min|DnnBin5Min|DnnBin6Min|DnnBin7Min|DnnBin8Min|DnnAllMax|DnnLpdMax|DnnLpdNMax|DnnLpdESMax|DnnMicroScrMax|DnnScrMax|DnnSlipMax|DnnAreaCountMax|DnnAreaMax|DnnHazeAvgMax|DnnHazeMedianMax|DnnHazeStdDevMax|DnnBin1Max|DnnBin2Max|DnnBin3Max|DnnBin4Max|DnnBin5Max|DnnBin6Max|DnnBin7Max|DnnBin8Max|DnnAllMean|DnnLpdMean|DnnLpdNMean|DnnLpdESMean|DnnMicroScrMean|DnnScrMean|DnnSlipMean|DnnAreaCountMean|DnnAreaMean|DnnHazeAvgMean|DnnHazeMedianMean|DnnHazeStdDevMean|DnnBin1Mean|DnnBin2Mean|DnnBin3Mean|DnnBin4Mean|DnnBin5Mean|DnnBin6Mean|DnnBin7Mean|DnnBin8Mean|DnnAllStdDev|DnnLpdStdDev|DnnLpdNStdDev|DnnLpdESStdDev|DnnMicroScrStdDev|DnnScrStdDev|DnnSlipStdDev|DnnAreaCountStdDev|DnnAreaStdDev|DnnHazeAvgStdDev|DnnHazeMedianStdDev|DnnHazeStdDevStdDev|DnnBin1StdDev|DnnBin2StdDev|DnnBin3StdDev|DnnBin4StdDev|DnnBin5StdDev|DnnBin6StdDev|DnnBin7StdDev|DnnBin8StdDev|Side|WaferID|Grade|SrcDest|DcnAll|DcnLpd|DcnLpdN|DcnLpdES|DcnMicroScr|DcnScr|DcnSlip|DcnAreaCount|DcnArea|DcnHazeAvg|DcnHazeMedian|DcnHazeStdDev|DcnBin1|DcnBin2|DcnBin3|DcnBin4|DcnBin5|DcnBin6|DcnBin7|DcnBin8|DwnAll|DwnLpd|DwnLpdN|DwnLpdES|DwnMicroScr|DwnScr|DwnSlip|DwnAreaCount|DwnArea|DwnHazeAvg|DwnHazeMedian|DwnHazeStdDev|DwnBin1|DwnBin2|DwnBin3|DwnBin4|DwnBin5|DwnBin6|DwnBin7|DwnBin8|DnnAll|DnnLpd|DnnLpdN|DnnLpdES|DnnMicroScr|DnnScr|DnnSlip|DnnAreaCount|DnnArea|DnnHazeAvg|DnnHazeMedian|DnnHazeStdDev|DnnBin1|DnnBin2|DnnBin3|DnnBin4|DnnBin5|DnnBin6|DnnBin7|DnnBin8|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Date|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|0|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|1|Grade1|2/1-2/1||0|NA|NA|NA|0|0.000|2|0.230|0.640|0.636|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.192|0.179|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.155|0.448|0.443|0.028|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|1|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|2|Grade1|2/2-2/2||0|NA|NA|NA|0|0.581|2|0.064|0.644|0.636|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.185|0.169|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.073|0.459|0.456|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|2|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|3|Grade1|2/3-2/3||0|NA|NA|NA|0|0.000|7|0.345|0.615|0.601|0.070|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.000|0.165|0.145|0.068|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|9|0.284|0.449|0.447|0.017|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|3|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|4|Grade1|2/4-2/4||0|NA|NA|NA|0|0.000|4|0.284|0.631|0.625|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.181|0.166|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.192|0.450|0.448|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|4|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|5|Grade1|2/5-2/5||0|NA|NA|NA|0|0.000|2|0.298|0.624|0.612|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.028|0.170|0.153|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.202|0.453|0.452|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|5|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|6|Grade1|2/6-2/6||0|NA|NA|NA|0|0.000|1|0.119|0.650|0.641|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.182|0.166|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.083|0.468|0.467|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|6|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|7|Grade1|2/7-2/7||0|NA|NA|NA|0|0.000|5|0.293|0.660|0.645|0.072|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.182|0.164|0.072|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.222|0.477|0.476|0.018|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|7|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|8|Grade1|2/8-2/8||0|NA|NA|NA|0|0.000|5|0.530|0.608|0.596|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.024|0.167|0.145|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|7|0.309|0.442|0.437|0.030|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|8|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|9|Grade1|2/9-2/9||0|NA|NA|NA|0|0.000|3|0.138|0.607|0.598|0.086|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|0|0.000|0.160|0.147|0.065|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.113|0.448|0.444|0.043|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|9|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|10|Grade1|2/10-2/10||0|NA|NA|NA|0|0.000|5|0.501|0.627|0.618|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.021|0.169|0.154|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.347|0.459|0.453|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|10|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|11|Grade1|2/11-2/11||0|NA|NA|NA|0|0.000|7|0.498|0.611|0.604|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.022|0.151|0.137|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|7|0.342|0.461|0.461|0.020|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|11|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|12|Grade1|2/12-2/12||0|NA|NA|NA|0|0.000|3|0.311|0.617|0.608|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.169|0.156|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.197|0.448|0.444|0.022|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|12|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|13|Grade1|2/13-2/13||0|NA|NA|NA|0|0.000|4|0.254|0.623|0.619|0.059|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.162|0.153|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.191|0.461|0.458|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|13|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|14|Grade1|2/14-2/14||0|NA|NA|NA|0|0.000|5|0.445|0.622|0.615|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.000|0.178|0.168|0.064|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.316|0.444|0.440|0.025|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|14|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|15|Grade1|2/15-2/15||0|NA|NA|NA|0|0.000|2|0.285|0.609|0.602|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.184|0.172|0.062|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.190|0.425|0.418|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|15|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|16|Grade1|2/16-2/16||0|NA|NA|NA|0|0.000|6|0.845|0.604|0.604|0.057|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.026|0.178|0.170|0.063|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.547|0.426|0.423|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|16|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|17|Grade1|2/17-2/17||0|NA|NA|NA|0|0.000|3|0.148|0.625|0.623|0.053|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.193|0.188|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.111|0.432|0.430|0.022|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|17|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|18|Grade1|2/18-2/18||0|NA|NA|NA|0|0.000|5|0.467|0.638|0.635|0.048|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.000|0.199|0.191|0.053|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|5|0.308|0.439|0.436|0.021|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|18|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|19|Grade1|2/19-2/19||0|NA|NA|NA|0|0.000|6|0.282|0.624|0.622|0.050|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.201|0.193|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.247|0.423|0.416|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|19|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|20|Grade1|2/20-2/20||0|NA|NA|NA|0|0.000|12|1.176|0.619|0.617|0.054|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.000|0.208|0.198|0.061|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|14|0.786|0.411|0.408|0.026|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|20|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|21|Grade1|2/21-2/21||0|NA|NA|NA|0|0.000|3|0.170|0.589|0.584|0.064|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.173|0.165|0.067|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|3|0.135|0.416|0.416|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|21|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|22|Grade1|2/22-2/22||0|NA|NA|NA|0|0.000|4|0.407|0.602|0.596|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.181|0.167|0.066|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.269|0.422|0.418|0.027|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|22|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|23|Grade1|2/23-2/23||0|NA|NA|NA|0|0.000|4|0.516|0.609|0.603|0.063|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.000|0.194|0.181|0.058|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.319|0.415|0.413|0.024|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|23|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|24|Grade1|2/24-2/24||0|NA|NA|NA|0|1.732|4|0.180|0.614|0.606|0.067|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|2|0.000|0.196|0.179|0.060|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|6|0.178|0.418|0.415|0.023|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					0.00|1|2|25|638810565835457504|SP101|24|666335|6IN_SLIP|1|0|NA|NA|NA|0|0.000|1|0.064|0.589|0.584|0.048|0|0|0|0|0|0|0|0|12|0|NA|NA|NA|0|1.732|12|1.176|0.660|0.645|0.278|0|0|0|0|0|0|0|0|4.440|0.000|NA|NA|NA|0.000|0.093|4.320|0.357|0.622|0.615|0.070|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.238|0.000|NA|NA|NA|0.000|0.361|2.249|0.243|0.016|0.016|0.044|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0|0|NA|NA|NA|NA|NA|0|0.000|0.151|0.137|0.053|0|0|0|0|0|0|0|0|4|0|NA|NA|NA|NA|NA|4|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0|1.560|0.000|NA|NA|NA|NA|NA|1.560|0.007|0.182|0.168|0.065|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1.083|0.000|NA|NA|NA|NA|NA|1.083|0.012|0.016|0.017|0.010|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|1|0|NA|NA|NA|NA|NA|1|0.073|0.411|0.408|0.017|0|0|0|0|0|0|0|0|14|0|NA|NA|NA|NA|NA|14|0.786|0.477|0.476|0.187|0|0|0|0|0|0|0|0|4.840|0.000|NA|NA|NA|NA|NA|4.840|0.250|0.440|0.437|0.032|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|2.577|0.000|NA|NA|NA|NA|NA|2.577|0.154|0.019|0.019|0.033|0.000|0.000|0.000|0.000|0.000|0.000|0.000|0.000|F|25|Grade1|2/25-2/25||0|NA|NA|NA|0|0.000|4|0.152|0.633|0.622|0.278|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|1|0.042|0.218|0.200|0.108|0|0|0|0|0|0|0|0||0|NA|NA|NA|NA|NA|4|0.128|0.415|0.414|0.187|0|0|0|0|0|0|0|0|666335|5113|55|-|-||55-666335-5113|4/24/2025 1:56:23 AM|8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000025
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000322
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/24/2025 01:56:23
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=6IN_SLIP_20250424_0127_2025-04-24_01;56;37;581.txt.csv;A_INFO2=25;A_JOBID=SP101;A_MES_ENTITY=SP101;A_MID=55-666335-5113;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638810565835457504;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666335;B_NULL_DATA=;B_PPID=6IN_SLIP;B_PROCESS_JOBID=55;B_PRODUCT=5113;B_SEQUENCE=638810565835457504;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										49
									
								
								.vscode/638811099895374259/1745538421 TENCOR1 667227 2025-04-24 16-46-29.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								.vscode/638811099895374259/1745538421 TENCOR1 667227 2025-04-24 16-46-29.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					1	1	1	0	0.10	0.21	0.019	0.10	4/24/2025 4:46:29 PM	1.15	1.18	1.12	0.0291	100	100	100	0	667227	0.013	0.019	0.006	0.006	2	3	0.006	1		667227	36	6IN_THIN ROTR	0.3	1	0	0.59	0.34	1.02	0	0.59	3	4	2	1	TENCOR1	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1 | 2 | 3 | 4 | 5   | 6    | 7     | 8   | 9                    | 10   | 11   | 12   | 13     | 14  | 15  | 16  | 17 | 18     | 19    | 20    | 21    | 22    | 23 | 24 | 25    | 26 | 27 | 28     | 29 | 30            | 31  | 32 | 33 | 34   | 35   | 36   | 37 | 38   | 39 | 40 | 41 | 42 | 43      |
 | 
				
			||||||
 | 
					|---|---|---|---|-----|------|-------|-----|----------------------|------|------|------|--------|-----|-----|-----|----|--------|-------|-------|-------|-------|----|----|-------|----|----|--------|----|---------------|-----|----|----|------|------|------|----|------|----|----|----|----|---------|
 | 
				
			||||||
 | 
					| 1 | 1 | 1 | 0 | 0.1 | 0.21 | 0.019 | 0.1 | 4/24/2025 4:46:29 PM | 1.15 | 1.18 | 1.12 | 0.0291 | 100 | 100 | 100 | 0  | 667227 | 0.013 | 0.019 | 0.006 | 0.006 | 2  | 3  | 0.006 | 1  |    | 667227 | 36 | 6IN_THIN ROTR | 0.3 | 1  | 0  | 0.59 | 0.34 | 1.02 | 0  | 0.59 | 3  | 4  | 2  | 1  | TENCOR1 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:1
 | 
				
			||||||
 | 
					<2>:1
 | 
				
			||||||
 | 
					<3>:1
 | 
				
			||||||
 | 
					<4>:0
 | 
				
			||||||
 | 
					<5>:0.1
 | 
				
			||||||
 | 
					<6>:0.21
 | 
				
			||||||
 | 
					<7>:0.019
 | 
				
			||||||
 | 
					<8>:0.1
 | 
				
			||||||
 | 
					<9>:4/24/2025 4:46:29 PM
 | 
				
			||||||
 | 
					<10>:1.15
 | 
				
			||||||
 | 
					<11>:1.18
 | 
				
			||||||
 | 
					<12>:1.12
 | 
				
			||||||
 | 
					<13>:0.0291
 | 
				
			||||||
 | 
					<14>:100
 | 
				
			||||||
 | 
					<15>:100
 | 
				
			||||||
 | 
					<16>:100
 | 
				
			||||||
 | 
					<17>:0
 | 
				
			||||||
 | 
					<18>:667227
 | 
				
			||||||
 | 
					<19>:0.013
 | 
				
			||||||
 | 
					<20>:0.019
 | 
				
			||||||
 | 
					<21>:0.006
 | 
				
			||||||
 | 
					<22>:0.006
 | 
				
			||||||
 | 
					<23>:2
 | 
				
			||||||
 | 
					<24>:3
 | 
				
			||||||
 | 
					<25>:0.006
 | 
				
			||||||
 | 
					<26>:1
 | 
				
			||||||
 | 
					<27>:
 | 
				
			||||||
 | 
					<28>:667227
 | 
				
			||||||
 | 
					<29>:36
 | 
				
			||||||
 | 
					<30>:6IN_THIN ROTR
 | 
				
			||||||
 | 
					<31>:0.3
 | 
				
			||||||
 | 
					<32>:1
 | 
				
			||||||
 | 
					<33>:0
 | 
				
			||||||
 | 
					<34>:0.59
 | 
				
			||||||
 | 
					<35>:0.34
 | 
				
			||||||
 | 
					<36>:1.02
 | 
				
			||||||
 | 
					<37>:0
 | 
				
			||||||
 | 
					<38>:0.59
 | 
				
			||||||
 | 
					<39>:3
 | 
				
			||||||
 | 
					<40>:4
 | 
				
			||||||
 | 
					<41>:2
 | 
				
			||||||
 | 
					<42>:1
 | 
				
			||||||
 | 
					<43>:TENCOR1
 | 
				
			||||||
							
								
								
									
										176
									
								
								.vscode/638811099895374259/TENCOR1_250424164629000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								.vscode/638811099895374259/TENCOR1_250424164629000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,176 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Id": -1,
 | 
				
			||||||
 | 
					  "AreaCountAvg": "1",
 | 
				
			||||||
 | 
					  "AreaCountMax": "1",
 | 
				
			||||||
 | 
					  "AreaCountMin": "1",
 | 
				
			||||||
 | 
					  "AreaCountStdDev": "0",
 | 
				
			||||||
 | 
					  "AreaTotalAvg": "0.10",
 | 
				
			||||||
 | 
					  "AreaTotalMax": "0.21",
 | 
				
			||||||
 | 
					  "AreaTotalMin": "0.019",
 | 
				
			||||||
 | 
					  "AreaTotalStdDev": "0.10",
 | 
				
			||||||
 | 
					  "Date": "4/24/2025 4:46:29 PM",
 | 
				
			||||||
 | 
					  "HazeAverageAvg": "1.15",
 | 
				
			||||||
 | 
					  "HazeAverageMax": "1.18",
 | 
				
			||||||
 | 
					  "HazeAverageMin": "1.12",
 | 
				
			||||||
 | 
					  "HazeAverageStdDev": "0.0291",
 | 
				
			||||||
 | 
					  "HazeRegionAvg": "100",
 | 
				
			||||||
 | 
					  "HazeRegionMax": "100",
 | 
				
			||||||
 | 
					  "HazeRegionMin": "100",
 | 
				
			||||||
 | 
					  "HazeRegionStdDev": "0",
 | 
				
			||||||
 | 
					  "Layer": null,
 | 
				
			||||||
 | 
					  "LotID": "667227",
 | 
				
			||||||
 | 
					  "LPDCM2Avg": "0.013",
 | 
				
			||||||
 | 
					  "LPDCM2Max": "0.019",
 | 
				
			||||||
 | 
					  "LPDCM2Min": "0.006",
 | 
				
			||||||
 | 
					  "LPDCM2StdDev": "0.006",
 | 
				
			||||||
 | 
					  "LPDCountAvg": "2",
 | 
				
			||||||
 | 
					  "LPDCountMax": "3",
 | 
				
			||||||
 | 
					  "LPDCountMin": "1",
 | 
				
			||||||
 | 
					  "LPDCountStdDev": "1",
 | 
				
			||||||
 | 
					  "Operator": "",
 | 
				
			||||||
 | 
					  "ParseErrorText": "ParseErrorText",
 | 
				
			||||||
 | 
					  "PSN": "5142",
 | 
				
			||||||
 | 
					  "RDS": "667227",
 | 
				
			||||||
 | 
					  "Reactor": "36",
 | 
				
			||||||
 | 
					  "Recipe": "6IN_THIN ROTR",
 | 
				
			||||||
 | 
					  "ScratchCountAvg": "0.3",
 | 
				
			||||||
 | 
					  "ScratchCountMax": "1",
 | 
				
			||||||
 | 
					  "ScratchCountMin": "0",
 | 
				
			||||||
 | 
					  "ScratchCountStdDev": "0.6",
 | 
				
			||||||
 | 
					  "ScratchTotalAvg": "0.34",
 | 
				
			||||||
 | 
					  "ScratchTotalMax": "1.02",
 | 
				
			||||||
 | 
					  "ScratchTotalMin": "0",
 | 
				
			||||||
 | 
					  "ScratchTotalStdDev": "0.59",
 | 
				
			||||||
 | 
					  "SumOfDefectsAvg": "3",
 | 
				
			||||||
 | 
					  "SumOfDefectsMax": "4",
 | 
				
			||||||
 | 
					  "SumOfDefectsMin": "2",
 | 
				
			||||||
 | 
					  "SumOfDefectsStdDev": "1",
 | 
				
			||||||
 | 
					  "Title": null,
 | 
				
			||||||
 | 
					  "UniqueId": "TENCOR1_1T667227_202504241646295374",
 | 
				
			||||||
 | 
					  "Zone": null,
 | 
				
			||||||
 | 
					  "CellName": "TENCOR1",
 | 
				
			||||||
 | 
					  "Data": "*Data*",
 | 
				
			||||||
 | 
					  "i": -1,
 | 
				
			||||||
 | 
					  "Details": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Id": 0,
 | 
				
			||||||
 | 
					      "AreaCount": "1",
 | 
				
			||||||
 | 
					      "AreaTotal": "0.0716mm2",
 | 
				
			||||||
 | 
					      "Bin1": "2",
 | 
				
			||||||
 | 
					      "Bin2": "1",
 | 
				
			||||||
 | 
					      "Bin3": "0",
 | 
				
			||||||
 | 
					      "Bin4": "0",
 | 
				
			||||||
 | 
					      "Bin5": "0",
 | 
				
			||||||
 | 
					      "Bin6": "0",
 | 
				
			||||||
 | 
					      "Bin7": null,
 | 
				
			||||||
 | 
					      "Bin8": null,
 | 
				
			||||||
 | 
					      "Comments": "- High Thruput",
 | 
				
			||||||
 | 
					      "Date": "4/24/2025 4:46:29 PM",
 | 
				
			||||||
 | 
					      "Diameter": "150 mm",
 | 
				
			||||||
 | 
					      "Exclusion": "4mm",
 | 
				
			||||||
 | 
					      "Gain": "4",
 | 
				
			||||||
 | 
					      "HazeAverage": "1.16ppm",
 | 
				
			||||||
 | 
					      "HazePeak": "25.5ppm",
 | 
				
			||||||
 | 
					      "HazeRegion": "100%",
 | 
				
			||||||
 | 
					      "HazeRng": "500ppm",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
 | 
				
			||||||
 | 
					      "LPDCM2": "0.019",
 | 
				
			||||||
 | 
					      "LPDCount": "3",
 | 
				
			||||||
 | 
					      "Laser": "488nm",
 | 
				
			||||||
 | 
					      "Mean": "0.252",
 | 
				
			||||||
 | 
					      "Recipe": "6IN_THIN ROTR",
 | 
				
			||||||
 | 
					      "ScratchCount": "1",
 | 
				
			||||||
 | 
					      "ScratchTotal": "1.02mm",
 | 
				
			||||||
 | 
					      "Slot": "01",
 | 
				
			||||||
 | 
					      "Sort": "PASS",
 | 
				
			||||||
 | 
					      "StdDev": "0.043",
 | 
				
			||||||
 | 
					      "SumOfDefects": "4",
 | 
				
			||||||
 | 
					      "Thresh": "0.200um",
 | 
				
			||||||
 | 
					      "Thruput": "Normal",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "UniqueId": "TENCOR1_1T667227_202504241646295374_Item-1",
 | 
				
			||||||
 | 
					      "Data": "*Data*",
 | 
				
			||||||
 | 
					      "i": -1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Id": 0,
 | 
				
			||||||
 | 
					      "AreaCount": "1",
 | 
				
			||||||
 | 
					      "AreaTotal": "0.0195mm2",
 | 
				
			||||||
 | 
					      "Bin1": "1",
 | 
				
			||||||
 | 
					      "Bin2": "0",
 | 
				
			||||||
 | 
					      "Bin3": "0",
 | 
				
			||||||
 | 
					      "Bin4": "0",
 | 
				
			||||||
 | 
					      "Bin5": "1",
 | 
				
			||||||
 | 
					      "Bin6": "0",
 | 
				
			||||||
 | 
					      "Bin7": null,
 | 
				
			||||||
 | 
					      "Bin8": null,
 | 
				
			||||||
 | 
					      "Comments": "- High Thruput",
 | 
				
			||||||
 | 
					      "Date": "4/24/2025 4:46:29 PM",
 | 
				
			||||||
 | 
					      "Diameter": "150 mm",
 | 
				
			||||||
 | 
					      "Exclusion": "4mm",
 | 
				
			||||||
 | 
					      "Gain": "4",
 | 
				
			||||||
 | 
					      "HazeAverage": "1.18ppm",
 | 
				
			||||||
 | 
					      "HazePeak": "25.0ppm",
 | 
				
			||||||
 | 
					      "HazeRegion": "100%",
 | 
				
			||||||
 | 
					      "HazeRng": "500ppm",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
 | 
				
			||||||
 | 
					      "LPDCM2": "0.013",
 | 
				
			||||||
 | 
					      "LPDCount": "2",
 | 
				
			||||||
 | 
					      "Laser": "488nm",
 | 
				
			||||||
 | 
					      "Mean": "1.32",
 | 
				
			||||||
 | 
					      "Recipe": "6IN_THIN ROTR",
 | 
				
			||||||
 | 
					      "ScratchCount": "0",
 | 
				
			||||||
 | 
					      "ScratchTotal": "0mm",
 | 
				
			||||||
 | 
					      "Slot": "15",
 | 
				
			||||||
 | 
					      "Sort": "PASS",
 | 
				
			||||||
 | 
					      "StdDev": "1.54",
 | 
				
			||||||
 | 
					      "SumOfDefects": "3",
 | 
				
			||||||
 | 
					      "Thresh": "0.200um",
 | 
				
			||||||
 | 
					      "Thruput": "Normal",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "UniqueId": "TENCOR1_1T667227_202504241646295374_Item-2",
 | 
				
			||||||
 | 
					      "Data": "*Data*",
 | 
				
			||||||
 | 
					      "i": -1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Id": 0,
 | 
				
			||||||
 | 
					      "AreaCount": "1",
 | 
				
			||||||
 | 
					      "AreaTotal": "0.213mm2",
 | 
				
			||||||
 | 
					      "Bin1": "0",
 | 
				
			||||||
 | 
					      "Bin2": "1",
 | 
				
			||||||
 | 
					      "Bin3": "0",
 | 
				
			||||||
 | 
					      "Bin4": "0",
 | 
				
			||||||
 | 
					      "Bin5": "0",
 | 
				
			||||||
 | 
					      "Bin6": "0",
 | 
				
			||||||
 | 
					      "Bin7": null,
 | 
				
			||||||
 | 
					      "Bin8": null,
 | 
				
			||||||
 | 
					      "Comments": "- High Thruput",
 | 
				
			||||||
 | 
					      "Date": "4/24/2025 4:46:29 PM",
 | 
				
			||||||
 | 
					      "Diameter": "150 mm",
 | 
				
			||||||
 | 
					      "Exclusion": "4mm",
 | 
				
			||||||
 | 
					      "Gain": "4",
 | 
				
			||||||
 | 
					      "HazeAverage": "1.12ppm",
 | 
				
			||||||
 | 
					      "HazePeak": "22.5ppm",
 | 
				
			||||||
 | 
					      "HazeRegion": "100%",
 | 
				
			||||||
 | 
					      "HazeRng": "500ppm",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "TENCOR1_1T667227_202504241646295374",
 | 
				
			||||||
 | 
					      "LPDCM2": "0.006",
 | 
				
			||||||
 | 
					      "LPDCount": "1",
 | 
				
			||||||
 | 
					      "Laser": "488nm",
 | 
				
			||||||
 | 
					      "Mean": "0.307",
 | 
				
			||||||
 | 
					      "Recipe": "6IN_THIN ROTR",
 | 
				
			||||||
 | 
					      "ScratchCount": "0",
 | 
				
			||||||
 | 
					      "ScratchTotal": "0mm",
 | 
				
			||||||
 | 
					      "Slot": "25",
 | 
				
			||||||
 | 
					      "Sort": "PASS",
 | 
				
			||||||
 | 
					      "StdDev": "0.000",
 | 
				
			||||||
 | 
					      "SumOfDefects": "2",
 | 
				
			||||||
 | 
					      "Thresh": "0.200um",
 | 
				
			||||||
 | 
					      "Thruput": "Normal",
 | 
				
			||||||
 | 
					      "Title": null,
 | 
				
			||||||
 | 
					      "UniqueId": "TENCOR1_1T667227_202504241646295374_Item-3",
 | 
				
			||||||
 | 
					      "Data": "*Data*",
 | 
				
			||||||
 | 
					      "i": -1
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								.vscode/638811099895374259/TENCOR1_250424164629000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								.vscode/638811099895374259/TENCOR1_250424164629000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"Comments"	"Diameter"	"Exclusion"	"Gain"	"HeaderUniqueId"	"Laser"	"ParseErrorText"	"RDS"	"Slot"	"UniqueId"	"AreaCount"	"AreaCountAvg"	"AreaCountMax"	"AreaCountMin"	"AreaCountStdDev"	"AreaTotal"	"AreaTotalAvg"	"AreaTotalMax"	"AreaTotalMin"	"AreaTotalStdDev"	"Bin1"	"Bin2"	"Bin3"	"Bin4"	"Bin5"	"Bin6"	"Bin7"	"Bin8"	"HazeAverage"	"HazeAverageAvg"	"HazeAverageMax"	"HazeAverageMin"	"HazeAverageStdDev"	"HazePeak"	"HazeRegion"	"HazeRegionAvg"	"HazeRegionMax"	"HazeRegionMin"	"HazeRegionStdDev"	"HazeRng"	"LPDCM2"	"LPDCM2Avg"	"LPDCM2Max"	"LPDCM2Min"	"LPDCM2StdDev"	"LPDCount"	"LPDCountAvg"	"LPDCountMax"	"LPDCountMin"	"LPDCountStdDev"	"Mean"	"ScratchCount"	"ScratchCountAvg"	"ScratchCountMax"	"ScratchCountMin"	"ScratchCountStdDev"	"ScratchTotal"	"ScratchTotalAvg"	"ScratchTotalMax"	"ScratchTotalMin"	"ScratchTotalStdDev"	"Sort"	"StdDev"	"SumOfDefects"	"SumOfDefectsAvg"	"SumOfDefectsMax"	"SumOfDefectsMin"	"SumOfDefectsStdDev"	"Thresh"	"Thruput"
 | 
				
			||||||
 | 
					0.00	1	2	7	3	0	TENCOR1	4/24/2025 4:46:29 PM		667227	5142	36	6IN_THIN ROTR	- High Thruput	150 mm	4mm	4	HeaderUniqueId	488nm	ParseErrorText	667227	01	UniqueId	1	1	1	1	0	0.0716mm2	0.10	0.21	0.019	0.10	2	1	0	0	0	0			1.16ppm	1.15	1.18	1.12	0.0291	25.5ppm	100%	100	100	100	0	500ppm	0.019	0.013	0.019	0.006	0.006	3	2	3	1	1	0.252	1	0.3	1	0	0.6	1.02mm	0.34	1.02	0	0.59	PASS	0.043	4	3	4	2	1	0.200um	Normal
 | 
				
			||||||
 | 
					0.00	1	2	7	3	1	TENCOR1	4/24/2025 4:46:29 PM		667227	5142	36	6IN_THIN ROTR	- High Thruput	150 mm	4mm	4	HeaderUniqueId	488nm	ParseErrorText	667227	15	UniqueId	1	1	1	1	0	0.0195mm2	0.10	0.21	0.019	0.10	1	0	0	0	1	0			1.18ppm	1.15	1.18	1.12	0.0291	25.0ppm	100%	100	100	100	0	500ppm	0.013	0.013	0.019	0.006	0.006	2	2	3	1	1	1.32	0	0.3	1	0	0.6	0mm	0.34	1.02	0	0.59	PASS	1.54	3	3	4	2	1	0.200um	Normal
 | 
				
			||||||
 | 
					0.00	1	2	7	3	2	TENCOR1	4/24/2025 4:46:29 PM		667227	5142	36	6IN_THIN ROTR	- High Thruput	150 mm	4mm	4	HeaderUniqueId	488nm	ParseErrorText	667227	25	UniqueId	1	1	1	1	0	0.213mm2	0.10	0.21	0.019	0.10	0	1	0	0	0	0			1.12ppm	1.15	1.18	1.12	0.0291	22.5ppm	100%	100	100	100	0	500ppm	0.006	0.013	0.019	0.006	0.006	1	2	3	1	1	0.307	0	0.3	1	0	0.6	0mm	0.34	1.02	0	0.59	PASS	0.000	2	3	4	2	1	0.200um	Normal
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000003
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000083
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/24/2025 16:46:29
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_HeaderId=524300;A_SubgroupId=1745538421;A_BASIC_TYPE=;A_INFO=202504241646295374.pcl.csv;A_INFO2=3;A_JOBID=TENCOR1;A_MES_ENTITY=TENCOR1;A_MID=1T667227;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811099895374259;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_HeaderId=524300;B_SubgroupId=1745538421;B_BASIC_TYPE=- High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667227;B_NULL_DATA=;B_PPID=6IN_THIN ROTR;B_PROCESS_JOBID=36;B_PRODUCT=5142;B_SEQUENCE=638811099895374259;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000002772
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000003437
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Date|Recipe|Id|WaferId|LPDCount|LPDCM2|AreaCount|AreaTotal|ScratchCount|ScratchTotal|SumOfDefects|HazeRegion|HazeAverage|Grade|LPDCountMin|LPDCM2Min|AreaCountMin|AreaTotalMin|ScratchCountMin|ScratchTotalMin|SumOfDefectsMin|HazeRegionMin|HazeAverageMin|LPDCountMax|LPDCM2Max|AreaCountMax|AreaTotalMax|ScratchCountMax|ScratchTotalMax|SumOfDefectsMax|HazeRegionMax|HazeAverageMax|LPDCountAvg|LPDCM2Avg|AreaCountAvg|AreaTotalAvg|ScratchCountAvg|ScratchTotalAvg|SumOfDefectsAvg|HazeRegionAvg|HazeAverageAvg|LPDCountStdDev|LPDCM2StdDev|AreaCountStdDev|AreaTotalStdDev|ScratchCountStdDev|ScratchTotalStdDev|SumOfDefectsStdDev|HazeRegionStdDev|HazeAverageStdDev|WaferDate|Comments|Sort|WaferLPDCount|WaferLPDCM2|Bin1|Bin2|Bin3|Bin4|Bin5|Bin6|Bin7|Bin8|Mean|StdDev|WaferAreaCount|WaferAreaTotal|WaferScratchCount|WaferScratchTotal|WaferSumOfDefects|WaferHazeRegion|WaferHazeAverage|HazePeak|Laser|Gain|Diameter|Thresh|Exclusion|HazeRng|Thruput|WaferRecipe|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|3|638811099895374259|TENCOR1|0|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|01|3|0.019|1|0.072|1|1.02|4|100|1.16|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:34:51 AM|- High Thruput|PASS|3|0.019|2|1|0|0|0|0|||0.252|0.043|1|0.0716mm2|1|1.02mm|4|100%|1.16ppm|25.5ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
 | 
				
			||||||
 | 
					0.00|1|2|3|638811099895374259|TENCOR1|1|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|15|2|0.013|1|0.019|0|0|3|100|1.18|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:35:39 AM|- High Thruput|PASS|2|0.013|1|0|0|0|1|0|||1.32|1.54|1|0.0195mm2|0|0mm|3|100%|1.18ppm|25.0ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
 | 
				
			||||||
 | 
					0.00|1|2|3|638811099895374259|TENCOR1|2|4/24/2025 4:46:29 PM|6IN_THIN ROTR|667227|25|1|0.006|1|0.21|0|0|2|100|1.12|P|1|0.006|1|0.019|0|0|2|100|1.12|3|0.019|1|0.21|1|1.02|4|100|1.18|2|0.013|1|0.10|0.3|0.34|3|100|1.15|1|0.006|0|0.10|0.6|0.59|1|0|0.0291|Wed, Apr 23, 2025 08:36:22 AM|- High Thruput|PASS|1|0.006|0|1|0|0|0|0|||0.307|0.000|1|0.213mm2|0|0mm|2|100%|1.12ppm|22.5ppm|488nm|4|150 mm|0.200um|4mm|500ppm|Normal|6IN_THIN ROTR|667227|5142|36|-|-||667227|7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000003
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000096
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/24/2025 16:46:29
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504241646295374.pcl.csv;A_INFO2=3;A_JOBID=TENCOR1;A_MES_ENTITY=TENCOR1;A_MID=1T667227;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811099895374259;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=- High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667227;B_NULL_DATA=;B_PPID=6IN_THIN ROTR;B_PROCESS_JOBID=36;B_PRODUCT=5142;B_SEQUENCE=638811099895374259;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										78
									
								
								.vscode/638811116720000000/1745540084 CDE5 666765 2025-04-24 17-14-32.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								.vscode/638811116720000000/1745540084 CDE5 666765 2025-04-24 17-14-32.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					UniqueId	666765	4/24/2025 5:14:32 PM	Lot	LSL8IN \ 10PT_5mm	57	666765	4626	1	-	CDE5	Operator	Engineer	DLRatio	18.55	AutoOptimizeGain	AutoProbeHeightSet	3.00		915.190	0.0069647	SemiRadial	1	95.00	270.000	913.9620971680	1.3236315	2	71.00	270.000	923.2605590820	1.2676778	3	47.00	270.000	921.4100952148	1.3205365	4	23.00	270.000	913.6674194336	1.2704575	5	0.00	0.000	908.1397705078	1.3234487	6	11.00	90.000	908.0071411133	1.2582344	7	35.00	90.000	916.3591918945	1.5512319	8	59.00	90.000	920.1303100586	1.7320848	9	83.00	90.000	921.3920288086	1.6781629	10	95.00	90.000	905.5722656250	1.7448909
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1        | 2      | 3                    | 4   | 5                 | 6  | 7      | 8    | 9 | 10 | 11   | 12       | 13       | 14      | 15    | 16               | 17                 | 18   | 19 | 20      | 21        | 22         | 23 | 24    | 25      | 26             | 27        | 28 | 29    | 30      | 31             | 32        | 33 | 34    | 35      | 36             | 37        | 38 | 39    | 40      | 41             | 42        | 43 | 44   | 45    | 46             | 47        | 48 | 49    | 50     | 51             | 52        | 53 | 54    | 55     | 56             | 57        | 58 | 59    | 60     | 61             | 62        | 63 | 64    | 65     | 66             | 67        | 68 | 69    | 70     | 71             | 72        |
 | 
				
			||||||
 | 
					|----------|--------|----------------------|-----|-------------------|----|--------|------|---|----|------|----------|----------|---------|-------|------------------|--------------------|------|----|---------|-----------|------------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|-------|---------|----------------|-----------|----|------|-------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|----|-------|--------|----------------|-----------|
 | 
				
			||||||
 | 
					| UniqueId | 666765 | 4/24/2025 5:14:32 PM | Lot | LSL8IN \ 10PT_5mm | 57 | 666765 | 4626 | 1 | -  | CDE5 | Operator | Engineer | DLRatio | 18.55 | AutoOptimizeGain | AutoProbeHeightSet | 3.00 |    | 915.190 | 0.0069647 | SemiRadial | 1  | 95.00 | 270.000 | 913.9620971680 | 1.3236315 | 2  | 71.00 | 270.000 | 923.2605590820 | 1.2676778 | 3  | 47.00 | 270.000 | 921.4100952148 | 1.3205365 | 4  | 23.00 | 270.000 | 913.6674194336 | 1.2704575 | 5  | 0.00 | 0.000 | 908.1397705078 | 1.3234487 | 6  | 11.00 | 90.000 | 908.0071411133 | 1.2582344 | 7  | 35.00 | 90.000 | 916.3591918945 | 1.5512319 | 8  | 59.00 | 90.000 | 920.1303100586 | 1.7320848 | 9  | 83.00 | 90.000 | 921.3920288086 | 1.6781629 | 10 | 95.00 | 90.000 | 905.5722656250 | 1.7448909 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:UniqueId
 | 
				
			||||||
 | 
					<2>:666765
 | 
				
			||||||
 | 
					<3>:4/24/2025 5:14:32 PM
 | 
				
			||||||
 | 
					<4>:Lot
 | 
				
			||||||
 | 
					<5>:LSL8IN \ 10PT_5mm
 | 
				
			||||||
 | 
					<6>:57
 | 
				
			||||||
 | 
					<7>:666765
 | 
				
			||||||
 | 
					<8>:4626
 | 
				
			||||||
 | 
					<9>:1
 | 
				
			||||||
 | 
					<10>:-
 | 
				
			||||||
 | 
					<11>:CDE5
 | 
				
			||||||
 | 
					<12>:Operator
 | 
				
			||||||
 | 
					<13>:Engineer
 | 
				
			||||||
 | 
					<14>:DLRatio
 | 
				
			||||||
 | 
					<15>:18.55
 | 
				
			||||||
 | 
					<16>:AutoOptimizeGain
 | 
				
			||||||
 | 
					<17>:AutoProbeHeightSet
 | 
				
			||||||
 | 
					<18>:3
 | 
				
			||||||
 | 
					<19>:
 | 
				
			||||||
 | 
					<20>:915.19
 | 
				
			||||||
 | 
					<21>:0.0069647
 | 
				
			||||||
 | 
					<22>:SemiRadial
 | 
				
			||||||
 | 
					<23>:1
 | 
				
			||||||
 | 
					<24>:95
 | 
				
			||||||
 | 
					<25>:270
 | 
				
			||||||
 | 
					<26>:913.9620972
 | 
				
			||||||
 | 
					<27>:1.3236315
 | 
				
			||||||
 | 
					<28>:2
 | 
				
			||||||
 | 
					<29>:71
 | 
				
			||||||
 | 
					<30>:270
 | 
				
			||||||
 | 
					<31>:923.2605591
 | 
				
			||||||
 | 
					<32>:1.2676778
 | 
				
			||||||
 | 
					<33>:3
 | 
				
			||||||
 | 
					<34>:47
 | 
				
			||||||
 | 
					<35>:270
 | 
				
			||||||
 | 
					<36>:921.4100952
 | 
				
			||||||
 | 
					<37>:1.3205365
 | 
				
			||||||
 | 
					<38>:4
 | 
				
			||||||
 | 
					<39>:23
 | 
				
			||||||
 | 
					<40>:270
 | 
				
			||||||
 | 
					<41>:913.6674194
 | 
				
			||||||
 | 
					<42>:1.2704575
 | 
				
			||||||
 | 
					<43>:5
 | 
				
			||||||
 | 
					<44>:0
 | 
				
			||||||
 | 
					<45>:0
 | 
				
			||||||
 | 
					<46>:908.1397705
 | 
				
			||||||
 | 
					<47>:1.3234487
 | 
				
			||||||
 | 
					<48>:6
 | 
				
			||||||
 | 
					<49>:11
 | 
				
			||||||
 | 
					<50>:90
 | 
				
			||||||
 | 
					<51>:908.0071411
 | 
				
			||||||
 | 
					<52>:1.2582344
 | 
				
			||||||
 | 
					<53>:7
 | 
				
			||||||
 | 
					<54>:35
 | 
				
			||||||
 | 
					<55>:90
 | 
				
			||||||
 | 
					<56>:916.3591919
 | 
				
			||||||
 | 
					<57>:1.5512319
 | 
				
			||||||
 | 
					<58>:8
 | 
				
			||||||
 | 
					<59>:59
 | 
				
			||||||
 | 
					<60>:90
 | 
				
			||||||
 | 
					<61>:920.1303101
 | 
				
			||||||
 | 
					<62>:1.7320848
 | 
				
			||||||
 | 
					<63>:9
 | 
				
			||||||
 | 
					<64>:83
 | 
				
			||||||
 | 
					<65>:90
 | 
				
			||||||
 | 
					<66>:921.3920288
 | 
				
			||||||
 | 
					<67>:1.6781629
 | 
				
			||||||
 | 
					<68>:10
 | 
				
			||||||
 | 
					<69>:95
 | 
				
			||||||
 | 
					<70>:90
 | 
				
			||||||
 | 
					<71>:905.5722656
 | 
				
			||||||
 | 
					<72>:1.7448909
 | 
				
			||||||
							
								
								
									
										122
									
								
								.vscode/638811116720000000/CDE5_250424171432000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								.vscode/638811116720000000/CDE5_250424171432000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,122 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "SentToMetrology": false,
 | 
				
			||||||
 | 
					  "SentToSPC": false,
 | 
				
			||||||
 | 
					  "AutoOptimizeGain": "AutoOptimizeGain",
 | 
				
			||||||
 | 
					  "AutoProbeHeightSet": "AutoProbeHeightSet",
 | 
				
			||||||
 | 
					  "Avg": "915.190",
 | 
				
			||||||
 | 
					  "CellName": "CDE5",
 | 
				
			||||||
 | 
					  "DLRatio": "DLRatio",
 | 
				
			||||||
 | 
					  "DataReject": "3.00",
 | 
				
			||||||
 | 
					  "Date": "4/24/2025 5:14:32 PM",
 | 
				
			||||||
 | 
					  "Engineer": "Engineer",
 | 
				
			||||||
 | 
					  "EquipId": "CDE5",
 | 
				
			||||||
 | 
					  "FileName": "",
 | 
				
			||||||
 | 
					  "FilePath": "",
 | 
				
			||||||
 | 
					  "Id": -1,
 | 
				
			||||||
 | 
					  "Layer": "1",
 | 
				
			||||||
 | 
					  "LotId": "Lot",
 | 
				
			||||||
 | 
					  "Op": "Operator",
 | 
				
			||||||
 | 
					  "PSN": "4626",
 | 
				
			||||||
 | 
					  "RDS": "666765",
 | 
				
			||||||
 | 
					  "Reactor": "57",
 | 
				
			||||||
 | 
					  "Recipe": "LSL8IN \\ 10PT_5mm",
 | 
				
			||||||
 | 
					  "ResistivitySpec": "ResistivitySpec",
 | 
				
			||||||
 | 
					  "Run": "666765",
 | 
				
			||||||
 | 
					  "SemiRadial": "SemiRadial",
 | 
				
			||||||
 | 
					  "StDev": "0.0069647",
 | 
				
			||||||
 | 
					  "Temp": "18.55",
 | 
				
			||||||
 | 
					  "UniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					  "Zone": "-",
 | 
				
			||||||
 | 
					  "Details": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.3236315",
 | 
				
			||||||
 | 
					      "Pt": "1",
 | 
				
			||||||
 | 
					      "R": "95.00",
 | 
				
			||||||
 | 
					      "Rs": "913.9620971680",
 | 
				
			||||||
 | 
					      "T": "270.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.2676778",
 | 
				
			||||||
 | 
					      "Pt": "2",
 | 
				
			||||||
 | 
					      "R": "71.00",
 | 
				
			||||||
 | 
					      "Rs": "923.2605590820",
 | 
				
			||||||
 | 
					      "T": "270.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-2"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.3205365",
 | 
				
			||||||
 | 
					      "Pt": "3",
 | 
				
			||||||
 | 
					      "R": "47.00",
 | 
				
			||||||
 | 
					      "Rs": "921.4100952148",
 | 
				
			||||||
 | 
					      "T": "270.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-3"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.2704575",
 | 
				
			||||||
 | 
					      "Pt": "4",
 | 
				
			||||||
 | 
					      "R": "23.00",
 | 
				
			||||||
 | 
					      "Rs": "913.6674194336",
 | 
				
			||||||
 | 
					      "T": "270.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-4"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.3234487",
 | 
				
			||||||
 | 
					      "Pt": "5",
 | 
				
			||||||
 | 
					      "R": "0.00",
 | 
				
			||||||
 | 
					      "Rs": "908.1397705078",
 | 
				
			||||||
 | 
					      "T": "0.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.2582344",
 | 
				
			||||||
 | 
					      "Pt": "6",
 | 
				
			||||||
 | 
					      "R": "11.00",
 | 
				
			||||||
 | 
					      "Rs": "908.0071411133",
 | 
				
			||||||
 | 
					      "T": "90.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-6"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.5512319",
 | 
				
			||||||
 | 
					      "Pt": "7",
 | 
				
			||||||
 | 
					      "R": "35.00",
 | 
				
			||||||
 | 
					      "Rs": "916.3591918945",
 | 
				
			||||||
 | 
					      "T": "90.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-7"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.7320848",
 | 
				
			||||||
 | 
					      "Pt": "8",
 | 
				
			||||||
 | 
					      "R": "59.00",
 | 
				
			||||||
 | 
					      "Rs": "920.1303100586",
 | 
				
			||||||
 | 
					      "T": "90.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-8"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.6781629",
 | 
				
			||||||
 | 
					      "Pt": "9",
 | 
				
			||||||
 | 
					      "R": "83.00",
 | 
				
			||||||
 | 
					      "Rs": "921.3920288086",
 | 
				
			||||||
 | 
					      "T": "90.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-9"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "CDE5_57-666765-4626.1_202504241714320000",
 | 
				
			||||||
 | 
					      "Merit": "1.7448909",
 | 
				
			||||||
 | 
					      "Pt": "10",
 | 
				
			||||||
 | 
					      "R": "95.00",
 | 
				
			||||||
 | 
					      "Rs": "905.5722656250",
 | 
				
			||||||
 | 
					      "T": "90.000",
 | 
				
			||||||
 | 
					      "UniqueId": "CDE5_57-666765-4626.1_202504241714320000_Item-10"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										57
									
								
								.vscode/638811116720000000/CDE5_250424171432000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								.vscode/638811116720000000/CDE5_250424171432000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"AutoOptimizeGain"	"AutoProbeHeightSet"	"Avg"	"DataReject"	"DLRatio"	"Merit"	"Pt"	"R"	"ResistivitySpec"	"Rs"	"SemiRadial"	"StdDev"	"T"	"Temp"	"Engineer"	"EquipId"	"FileName"	"HeaderUniqueId"	"Id"	"Layer"	"RDS"	"Run"	"UniqueId"	"Zone"	"SheetRhoVariation"
 | 
				
			||||||
 | 
					0.00	1	2	24	10	0	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.3236315	1	95.00	ResistivitySpec	913.9620971680	SemiRadial	0.0069647	270.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	1	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.2676778	2	71.00	ResistivitySpec	923.2605590820	SemiRadial	0.0069647	270.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	2	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.3205365	3	47.00	ResistivitySpec	921.4100952148	SemiRadial	0.0069647	270.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	3	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.2704575	4	23.00	ResistivitySpec	913.6674194336	SemiRadial	0.0069647	270.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	4	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.3234487	5	0.00	ResistivitySpec	908.1397705078	SemiRadial	0.0069647	0.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	5	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.2582344	6	11.00	ResistivitySpec	908.0071411133	SemiRadial	0.0069647	90.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	6	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.5512319	7	35.00	ResistivitySpec	916.3591918945	SemiRadial	0.0069647	90.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	7	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.7320848	8	59.00	ResistivitySpec	920.1303100586	SemiRadial	0.0069647	90.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	8	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.6781629	9	83.00	ResistivitySpec	921.3920288086	SemiRadial	0.0069647	90.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					0.00	1	2	24	10	9	CDE5	4/24/2025 5:14:32 PM	Operator	Lot	4626	57	LSL8IN \ 10PT_5mm	AutoOptimizeGain	AutoProbeHeightSet	915.190	3.00	DLRatio	1.7448909	10	95.00	ResistivitySpec	905.5722656250	SemiRadial	0.0069647	90.000	18.55	Engineer	ResMap5		HeaderUniqueId	Id	1	666765	666765	UniqueId	-	
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000010
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000038
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/24/2025 17:14:32
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_HeaderId=309148;A_SubgroupId=1745540084;A_BASIC_TYPE=;A_INFO=5424R116.RsM.csv;A_INFO2=10;A_JOBID=CDE5;A_MES_ENTITY=CDE5;A_MID=57-666765-4626.1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811116720000000;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_HeaderId=309148;B_SubgroupId=1745540084;B_BASIC_TYPE=-;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666765;B_NULL_DATA=;B_PPID=10PT_5mm;B_PROCESS_JOBID=57;B_PRODUCT=4626;B_SEQUENCE=638811116720000000;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000007317
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000007957
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Title|TheFileName|Project|RecipeName|LotID|WfrID|Is_TF_DataFile|Directory|Time|Date|Temp|TCRPercent|NOrP|Avg|Dev|Min|Max|Operator|Equipment|Engineer|AreaOrDiamScan|WaferShape|BNBand|TemplateFile|XSize|YSize|CalibrationFactor|MsmtMode|DataType|DataUnit|NumProbePoints|SingleOrDualProbeConfig|NumberActPrbPts|Rsens|IdrvMx|VinGain|DataRejectSigma|MeritThreshold|PrbChgNumber|PrbName|WaferSize|EdgeEx|Xll|Yll|Xur|Yur|X|Y|CutCorners|DiamThScan|DiamStart|DiamEnd|DiamStep|FlatOrNotch|FollowMajorFlat|AutoOrManualLoad|RangeOrIndividual|PauseAfterEveryRun|AutoPrint|Plot|BulkSampleThk|Unit|RangeFrom|RangeTo|CassetteSlotSelected|R|Th|Data|Rs|RsA|RsB|NumberSample|PointX|PointY|Irng|Vrng|ChiSq|MeritGOF|DataIntegrity|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|InferredPoint|StandardDeviationPercentage|SheetRhoVariation|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|0|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|95.00|270.000|913.9620971680|913.9620971680|914.08798462|731.11854485|1184|-95.00|-0.00|3051|1102|1.4E+02|1.3236315|0|666765|4626|57|1|-||57-666765-4626.1|1|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|1|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|71.00|270.000|923.2605590820|923.2605590820|923.56932267|738.79669064|1184|-71.00|-0.00|3051|1057|1.3E+02|1.2676778|0|666765|4626|57|1|-||57-666765-4626.1|2|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|2|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|47.00|270.000|921.4100952148|921.4100952148|909.70358100|721.40113210|1184|-47.00|-0.00|3054|1046|1.2E+02|1.3205365|0|666765|4626|57|1|-||57-666765-4626.1|3|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|3|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|23.00|270.000|913.6674194336|913.6674194336|896.28473107|707.65557259|1184|-23.00|-0.00|3055|1042|1.2E+02|1.2704575|0|666765|4626|57|1|-||57-666765-4626.1|4|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|4|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|0.00|0.000|908.1397705078|908.1397705078|898.61367587|713.68271830|1184|0.00|0.00|3052|1033|1.0E+02|1.3234487|0|666765|4626|57|1|-||57-666765-4626.1|5|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|5|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|11.00|90.000|908.0071411133|908.0071411133|900.37349147|716.08698414|1184|11.00|0.00|3052|1027|1.2E+02|1.2582344|0|666765|4626|57|1|-||57-666765-4626.1|6|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|6|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|35.00|90.000|916.3591918945|916.3591918945|903.86156023|716.31006062|1184|35.00|0.00|3052|1020|8.3E+01|1.5512319|0|666765|4626|57|1|-||57-666765-4626.1|7|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|7|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|59.00|90.000|920.1303100586|920.1303100586|914.46298514|728.38862138|1184|59.00|0.00|3050|1047|7.1E+01|1.7320848|0|666765|4626|57|1|-||57-666765-4626.1|8|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|8|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|83.00|90.000|921.3920288086|921.3920288086|913.59693033|726.57794711|1184|83.00|0.00|3051|1029|7.6E+01|1.6781629|0|666765|4626|57|1|-||57-666765-4626.1|9|0.0069647||24
 | 
				
			||||||
 | 
					0.00|1|2|10|638811116720000000|CDE5|9|666765||LSL8IN|LSL8IN \ 10PT_5mm|MyCarrierID|WaferID|0||17:14|4/24/2025 5:14:32 PM|18.55|0.300|?|915.190|6.374|905.57|923.26|Operator|ResMap5|Engineer|TC|8|10PT_5mm.TPL|125.00|125.00|1.00000|0|Rs|Ohms/sq||10|2|10|99348.000|0.0000750007|0.01287|3.00|0.10|1|MyFavoriteProbe|200.00|10.00|-55.00|-55.00|55.00|55.00|5|5|89|0.00|-50.00|50.00|2.0000|N|Y|M|I|N|Y|N|500.000000|U|25|25|NNNNNNNNNNNNNNNNNNNNNNNNNN|95.00|90.000|905.5722656250|905.5722656250|917.53049853|739.99994302|1184|95.00|0.00|3052|1055|6.7E+01|1.7448909|0|666765|4626|57|1|-||57-666765-4626.1|10|0.0069647||24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000010
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000097
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/24/2025 17:14:32
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=5424R116.RsM.csv;A_INFO2=10;A_JOBID=CDE5;A_MES_ENTITY=CDE5;A_MID=57-666765-4626.1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811116720000000;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=-;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=666765;B_NULL_DATA=;B_PPID=10PT_5mm;B_PROCESS_JOBID=57;B_PRODUCT=4626;B_SEQUENCE=638811116720000000;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										36
									
								
								.vscode/638811150679527382/1745543491 BIORAD2 667740 2025-04-24 18-11-07.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.vscode/638811150679527382/1745543491 BIORAD2 667740 2025-04-24 18-11-07.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					Bio-Rad UniqueId	4/24/2025 6:11:07 PM		6inTHICK	40	667740	5159	1	1		667740	2.520	1	119.11	2	0.00	3	118.87	4	0.00	5	0.00	6	0.00	7	117.12	8	116.95	9	116.18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1                | 2                    | 3 | 4        | 5  | 6      | 7    | 8 | 9 | 10 | 11     | 12   | 13 | 14     | 15 | 16 | 17 | 18     | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26     | 27 | 28     | 29 | 30     |
 | 
				
			||||||
 | 
					|------------------|----------------------|---|----------|----|--------|------|---|---|----|--------|------|----|--------|----|----|----|--------|----|----|----|----|----|----|----|--------|----|--------|----|--------|
 | 
				
			||||||
 | 
					| Bio-Rad UniqueId | 4/24/2025 6:11:07 PM |   | 6inTHICK | 40 | 667740 | 5159 | 1 | 1 |    | 667740 | 2.52 | 1  | 119.11 | 2  | 0  | 3  | 118.87 | 4  | 0  | 5  | 0  | 6  | 0  | 7  | 117.12 | 8  | 116.95 | 9  | 116.18 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:Bio-Rad UniqueId
 | 
				
			||||||
 | 
					<2>:4/24/2025 6:11:07 PM
 | 
				
			||||||
 | 
					<3>:
 | 
				
			||||||
 | 
					<4>:6inTHICK
 | 
				
			||||||
 | 
					<5>:40
 | 
				
			||||||
 | 
					<6>:667740
 | 
				
			||||||
 | 
					<7>:5159
 | 
				
			||||||
 | 
					<8>:1
 | 
				
			||||||
 | 
					<9>:1
 | 
				
			||||||
 | 
					<10>:
 | 
				
			||||||
 | 
					<11>:667740
 | 
				
			||||||
 | 
					<12>:2.52
 | 
				
			||||||
 | 
					<13>:1
 | 
				
			||||||
 | 
					<14>:119.11
 | 
				
			||||||
 | 
					<15>:2
 | 
				
			||||||
 | 
					<16>:0
 | 
				
			||||||
 | 
					<17>:3
 | 
				
			||||||
 | 
					<18>:118.87
 | 
				
			||||||
 | 
					<19>:4
 | 
				
			||||||
 | 
					<20>:0
 | 
				
			||||||
 | 
					<21>:5
 | 
				
			||||||
 | 
					<22>:0
 | 
				
			||||||
 | 
					<23>:6
 | 
				
			||||||
 | 
					<24>:0
 | 
				
			||||||
 | 
					<25>:7
 | 
				
			||||||
 | 
					<26>:117.12
 | 
				
			||||||
 | 
					<27>:8
 | 
				
			||||||
 | 
					<28>:116.95
 | 
				
			||||||
 | 
					<29>:9
 | 
				
			||||||
 | 
					<30>:116.18
 | 
				
			||||||
							
								
								
									
										80
									
								
								.vscode/638811150679527382/BIORAD2_250424181107000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								.vscode/638811150679527382/BIORAD2_250424181107000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "SentToMetrology": false,
 | 
				
			||||||
 | 
					  "SentToSPC": false,
 | 
				
			||||||
 | 
					  "Id": -1,
 | 
				
			||||||
 | 
					  "Batch": "667740",
 | 
				
			||||||
 | 
					  "Cassette": "",
 | 
				
			||||||
 | 
					  "CellName": "BIORAD2",
 | 
				
			||||||
 | 
					  "Date": "4/24/2025 6:11:07 PM",
 | 
				
			||||||
 | 
					  "FilePath": "",
 | 
				
			||||||
 | 
					  "Layer": "1",
 | 
				
			||||||
 | 
					  "MeanThickness": "117.645",
 | 
				
			||||||
 | 
					  "Op": "CL",
 | 
				
			||||||
 | 
					  "PSN": "5159",
 | 
				
			||||||
 | 
					  "PassFail": "FAIL",
 | 
				
			||||||
 | 
					  "RDS": "667740",
 | 
				
			||||||
 | 
					  "RVThickness": "2.520",
 | 
				
			||||||
 | 
					  "Reactor": "40",
 | 
				
			||||||
 | 
					  "Recipe": "6inTHICK",
 | 
				
			||||||
 | 
					  "StdDev": "1.279",
 | 
				
			||||||
 | 
					  "Title": "Bio-Rad QS400MEPI",
 | 
				
			||||||
 | 
					  "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					  "Wafer": "667740",
 | 
				
			||||||
 | 
					  "Zone": "1",
 | 
				
			||||||
 | 
					  "Details": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "1",
 | 
				
			||||||
 | 
					      "Thickness": "119.11",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-1"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "2",
 | 
				
			||||||
 | 
					      "Thickness": "0.00",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-2"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "3",
 | 
				
			||||||
 | 
					      "Thickness": "118.87",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-3"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "4",
 | 
				
			||||||
 | 
					      "Thickness": "0.00",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-4"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "5",
 | 
				
			||||||
 | 
					      "Thickness": "0.00",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-5"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "6",
 | 
				
			||||||
 | 
					      "Thickness": "0.00",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-6"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "7",
 | 
				
			||||||
 | 
					      "Thickness": "117.12",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-7"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "8",
 | 
				
			||||||
 | 
					      "Thickness": "116.95",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-8"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527",
 | 
				
			||||||
 | 
					      "Position": "9",
 | 
				
			||||||
 | 
					      "Thickness": "116.18",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD2_40-667740-5159.1-1_202504241811079527_Item-9"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										55
									
								
								.vscode/638811150679527382/BIORAD2_250424181107000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								.vscode/638811150679527382/BIORAD2_250424181107000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"Cassette"	"HeaderUniqueId"	"Layer"	"PassFail"	"Position"	"RDS"	"Title"	"UniqueId"	"Wafer"	"Zone"	"MeanThickness"	"RVThickness"	"StdDev"	"Thickness"	"Slot"	"ThicknessFourteen3mmEdgeMean"	"ThicknessFourteen3mmEdgePercent"	"ThicknessFourteen5mmEdgeMean"	"ThicknessFourteen5mmEdgePercent"	"ThicknessFourteenCenterMean"	"ThicknessFourteenCriticalPointsAverage"	"ThicknessFourteenCriticalPointsStdDev"	"ThicknessFourteenMeanFrom"	"Thickness01"	"Thickness02"	"Thickness03"	"Thickness04"	"Thickness05"	"Thickness06"	"Thickness07"	"Thickness08"	"Thickness09"	"Thickness10"	"Thickness11"	"Thickness12"	"Thickness13"	"Thickness14"
 | 
				
			||||||
 | 
					0.00	1	2	25	9	0	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	1	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	119.11	00									119.11													
 | 
				
			||||||
 | 
					0.00	1	2	25	9	1	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	2	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	0.00	00										0.00												
 | 
				
			||||||
 | 
					0.00	1	2	25	9	2	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	3	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	118.87	00											118.87											
 | 
				
			||||||
 | 
					0.00	1	2	25	9	3	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	4	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	0.00	00												0.00										
 | 
				
			||||||
 | 
					0.00	1	2	25	9	4	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	5	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	0.00	00													0.00									
 | 
				
			||||||
 | 
					0.00	1	2	25	9	5	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	6	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	0.00	00														0.00								
 | 
				
			||||||
 | 
					0.00	1	2	25	9	6	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	7	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	117.12	00															117.12							
 | 
				
			||||||
 | 
					0.00	1	2	25	9	7	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	8	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	116.95	00																116.95						
 | 
				
			||||||
 | 
					0.00	1	2	25	9	8	BIORAD2	4/24/2025 6:11:07 PM	CL	667740	5159	40	6inTHICK		HeaderUniqueId	1	FAIL	9	667740	Bio-Rad QS400MEPI	UniqueId	667740	1	117.645	2.520	1.279	116.18	00																	116.18					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000009
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000050
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/24/2025 18:11:07
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_HeaderId=514141;A_SubgroupId=1745543491;A_BASIC_TYPE=;A_INFO=202504241811079527.TXT.csv;A_INFO2=9;A_JOBID=BIORAD2;A_MES_ENTITY=BIORAD2;A_MID=40-667740-5159.1-1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811150679527382;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_HeaderId=514141;B_SubgroupId=1745543491;B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667740;B_NULL_DATA=;B_PPID=6inTHICK;B_PROCESS_JOBID=40;B_PRODUCT=5159;B_SEQUENCE=638811150679527382;B_WAFER_ID=-;B_WAFER_POS=1;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000003202
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000003871
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Title|Recipe|DateTime|Operator|Batch|Cassette|UsedLast|Wafer|Position|Thickness|WaferMeanThickness|StdDev|PassFail|Line|RadialVariationThickness|Slot|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Thickness 14 3mm Edge Mean|Thickness 14 3mm Edge % from R/2|Thickness 14 5mm Edge Mean|Thickness 14 5mm Edge % from R/2|Thickness 14 Center Mean|Thickness 14 Average|Thickness 14 Std Dev|Thickness 14 R 2/Mean|Thickness01|Thickness02|Thickness03|Thickness04|Thickness05|Thickness06|Thickness07|Thickness08|Thickness09|Thickness10|Thickness11|Thickness12|Thickness13|Thickness14|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|0|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|1|119.11|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||119.11||||||||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|1|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|2|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||0.00|||||||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|2|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|3|118.87|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||118.87||||||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|3|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|4|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||0.00|||||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|4|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|5|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||0.00||||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|5|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|6|0.00|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||||0.00|||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|6|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|7|117.12|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||||117.12||||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|7|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|8|116.95|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1||||||||||||||||116.95|||||||25
 | 
				
			||||||
 | 
					0.00|1|2|9|638811150679527382|BIORAD2|8|Bio-Rad QS400MEPI|6inTHICK|4/24/2025 6:11:07 PM|CL|BIORAD#2||True|667740|9|116.18|117.645|1.279|FAIL|Radial variation (computation B) PASS:|2.520|00|667740|5159|40|1|1||40-667740-5159.1-1|||||||||||||||||116.18||||||25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000009
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000053
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/24/2025 18:11:07
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504241811079527.TXT.csv;A_INFO2=9;A_JOBID=BIORAD2;A_MES_ENTITY=BIORAD2;A_MID=40-667740-5159.1-1;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811150679527382;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667740;B_NULL_DATA=;B_PPID=6inTHICK;B_PROCESS_JOBID=40;B_PRODUCT=5159;B_SEQUENCE=638811150679527382;B_WAFER_ID=-;B_WAFER_POS=1;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										22
									
								
								.vscode/638811206483711430/1745549064 BIORAD5 667283 2025-04-24 19-44-08.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.vscode/638811206483711430/1745549064 BIORAD5 667283 2025-04-24 19-44-08.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					Stratus_32-667283-5095_20250424074408371	4/24/2025 7:44:08 PM	BIORAD5	FQA Thickness		6in_CENTERPOINT	32	667283	5095	_24_19_41	667283	6.971	1	6.963	25	6.980
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1                                        | 2                    | 3       | 4             | 5 | 6               | 7  | 8      | 9    | 10        | 11     | 12    | 13 | 14    | 15 | 16   |
 | 
				
			||||||
 | 
					|------------------------------------------|----------------------|---------|---------------|---|-----------------|----|--------|------|-----------|--------|-------|----|-------|----|------|
 | 
				
			||||||
 | 
					| Stratus_32-667283-5095_20250424074408371 | 4/24/2025 7:44:08 PM | BIORAD5 | FQA Thickness |   | 6in_CENTERPOINT | 32 | 667283 | 5095 | _24_19_41 | 667283 | 6.971 | 1  | 6.963 | 25 | 6.98 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:Stratus_32-667283-5095_20250424074408371
 | 
				
			||||||
 | 
					<2>:4/24/2025 7:44:08 PM
 | 
				
			||||||
 | 
					<3>:BIORAD5
 | 
				
			||||||
 | 
					<4>:FQA Thickness
 | 
				
			||||||
 | 
					<5>:
 | 
				
			||||||
 | 
					<6>:6in_CENTERPOINT
 | 
				
			||||||
 | 
					<7>:32
 | 
				
			||||||
 | 
					<8>:667283
 | 
				
			||||||
 | 
					<9>:5095
 | 
				
			||||||
 | 
					<10>:_24_19_41
 | 
				
			||||||
 | 
					<11>:667283
 | 
				
			||||||
 | 
					<12>:6.971
 | 
				
			||||||
 | 
					<13>:1
 | 
				
			||||||
 | 
					<14>:6.963
 | 
				
			||||||
 | 
					<15>:25
 | 
				
			||||||
 | 
					<16>:6.98
 | 
				
			||||||
							
								
								
									
										59
									
								
								.vscode/638811206483711430/BIORAD5_250424194408000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								.vscode/638811206483711430/BIORAD5_250424194408000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Id": -1,
 | 
				
			||||||
 | 
					  "Batch": "_24_19_41",
 | 
				
			||||||
 | 
					  "Cassette": "667283",
 | 
				
			||||||
 | 
					  "CellName": "BIORAD5",
 | 
				
			||||||
 | 
					  "Date": "4/24/2025 7:44:08 PM",
 | 
				
			||||||
 | 
					  "FilePath": "",
 | 
				
			||||||
 | 
					  "MeanThickness": "6.971",
 | 
				
			||||||
 | 
					  "Operator": "",
 | 
				
			||||||
 | 
					  "PSN": "5095",
 | 
				
			||||||
 | 
					  "RDS": "667283",
 | 
				
			||||||
 | 
					  "Reactor": "32",
 | 
				
			||||||
 | 
					  "Recipe": "6in_CENTERPOINT",
 | 
				
			||||||
 | 
					  "StdDev": "0.0115",
 | 
				
			||||||
 | 
					  "Title": "_24_19_41",
 | 
				
			||||||
 | 
					  "UniqueId": "BIORAD5_32-667283-5095_202504241944083711",
 | 
				
			||||||
 | 
					  "Details": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD5_32-667283-5095_202504241944083711",
 | 
				
			||||||
 | 
					      "Mean": "6.963",
 | 
				
			||||||
 | 
					      "PassFail": "PASS",
 | 
				
			||||||
 | 
					      "Position": "1",
 | 
				
			||||||
 | 
					      "Recipe": "6in_CENTERPOINT",
 | 
				
			||||||
 | 
					      "Slot": "1",
 | 
				
			||||||
 | 
					      "StdDev": "0",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD5_32-667283-5095_202504241944083711_Item-1",
 | 
				
			||||||
 | 
					      "Thickness": "6.963",
 | 
				
			||||||
 | 
					      "Wafer": "Wafer 1",
 | 
				
			||||||
 | 
					      "Points": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "HeaderUniqueId": "HeaderUniqueId",
 | 
				
			||||||
 | 
					          "Position": "1",
 | 
				
			||||||
 | 
					          "Thickness": "6.963",
 | 
				
			||||||
 | 
					          "UniqueId": "UniqueId"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "BIORAD5_32-667283-5095_202504241944083711",
 | 
				
			||||||
 | 
					      "Mean": "6.980",
 | 
				
			||||||
 | 
					      "PassFail": "PASS",
 | 
				
			||||||
 | 
					      "Position": "25",
 | 
				
			||||||
 | 
					      "Recipe": "6in_CENTERPOINT",
 | 
				
			||||||
 | 
					      "Slot": "25",
 | 
				
			||||||
 | 
					      "StdDev": "0",
 | 
				
			||||||
 | 
					      "UniqueId": "BIORAD5_32-667283-5095_202504241944083711_Item-2",
 | 
				
			||||||
 | 
					      "Thickness": "6.980",
 | 
				
			||||||
 | 
					      "Wafer": "Wafer 25",
 | 
				
			||||||
 | 
					      "Points": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "HeaderUniqueId": "HeaderUniqueId",
 | 
				
			||||||
 | 
					          "Position": "25",
 | 
				
			||||||
 | 
					          "Thickness": "6.980",
 | 
				
			||||||
 | 
					          "UniqueId": "UniqueId"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										41
									
								
								.vscode/638811206483711430/BIORAD5_250424194408000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								.vscode/638811206483711430/BIORAD5_250424194408000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"MID"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"Cassette"	"GradeStdDev"	"HeaderUniqueId"	"Layer"	"MeanThickness"	"PassFail"	"RDS"	"Slot"	"Title"	"UniqueId"	"Wafer"	"Zone"	"Mean"	"Position"	"StdDev"	"Thickness"	"ThicknessSlotOne"	"ThicknessSlotTwentyFive"	"DeltaThicknessSlotsOneAndTwentyFive"	"PercentDeltaThicknessSlotsOneAndTwentyFive"
 | 
				
			||||||
 | 
					0.00	1	2	26	2	0	BIORAD5	667283	4/24/2025 7:44:08 PM		_24_19_41	5095	32	6in_CENTERPOINT	667283	0.0115	HeaderUniqueId	-	6.971	PASS	667283	1	_24_19_41	UniqueId	Wafer 1	-	6.963	1	0	6.963	ThicknessSlotOne	ThicknessSlotTwentyFive		
 | 
				
			||||||
 | 
					0.00	1	2	26	2	1	BIORAD5	667283	4/24/2025 7:44:08 PM		_24_19_41	5095	32	6in_CENTERPOINT	667283	0.0115	HeaderUniqueId	-	6.971	PASS	667283	25	_24_19_41	UniqueId	Wafer 25	-	6.980	25	0	6.980	ThicknessSlotOne	ThicknessSlotTwentyFive		
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000002
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000034
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/24/2025 19:44:08
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_HeaderId=348729;A_SubgroupId=1745549064;A_BASIC_TYPE=;A_INFO=DataBiorad.txt-0.csv;A_INFO2=2;A_JOBID=BIORAD5;A_MES_ENTITY=BIORAD5;A_MID=32-667283-5095;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811206483711430;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_HeaderId=348729;B_SubgroupId=1745549064;B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667283;B_NULL_DATA=;B_PPID=6in_CENTERPOINT;B_PROCESS_JOBID=32;B_PRODUCT=5095;B_SEQUENCE=638811206483711430;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000000838
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000001510
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Batch|Cassette|DateTime|Destination|Mean|PassFail|Recipe|Reference|Site|Slot|Source|StdDev|Text|GradeMean|GradeStdDev|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Actual Delta Thick Pts 1 and 25|% Delta Thick Pts 1 and 25|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|2|638811206483711430|BIORAD5|0|_24_19_41|667283|4/24/2025 7:44:08 PM||6.963|PASS|6in_CENTERPOINT||6.963|1||0|Wafer 1|6.971|0.0115|667283|5095|32|-|-||_24_19_41|||26
 | 
				
			||||||
 | 
					0.00|1|2|2|638811206483711430|BIORAD5|1|_24_19_41|667283|4/24/2025 7:44:08 PM||6.980|PASS|6in_CENTERPOINT||6.980|25||0|Wafer 25|6.971|0.0115|667283|5095|32|-|-||_24_19_41|||26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000002
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000032
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/24/2025 19:44:08
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=DataBiorad.txt-0.csv;A_INFO2=2;A_JOBID=BIORAD5;A_MES_ENTITY=BIORAD5;A_MID=32-667283-5095;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811206483711430;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=Left - High Thruput;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667283;B_NULL_DATA=;B_PPID=6in_CENTERPOINT;B_PROCESS_JOBID=32;B_PRODUCT=5095;B_SEQUENCE=638811206483711430;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										103
									
								
								.vscode/638811672019538124/1745595622 HGCV2 667776 2025-04-25 08-40-01.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								.vscode/638811672019538124/1745595622 HGCV2 667776 2025-04-25 08-40-01.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,103 @@
 | 
				
			|||||||
 | 
					UniqueId	HGCV2	46	667776	5159	-	-	ZONE2	667776	5PT MES	4/25/2025 8:40:01 AM	150.00	1.02	2.130E-002	N	PARALLEL	-5.00	-20.00	2500	2000.00	6IN5PT	6IN5PT	SSMDATA	6_5PT10M.PAT	ASTM: F723 - 82	7.599e+013	2.352e+000	2.799e+000	7.634e+013	2.352e+000	2.766e+000	3.342e-001	4.365e+001	4.605e+001	1.713e+001	2.053e+000	2.563e+000	5.632e+001	2.315e+000	2.779e+000	5.607e+001	2.321e+000	2.746e+000	9.000e+001	-1.000e+000	0.000e+000	2.251e+000	2.931e+001	3.713e+001	-1.000e+000	-1.000e+000	0.000e+000	1	7.854E+013	7.882E+013	0.294	17.109	54.482	54.286	90.000	2.193	2	7.447E+013	7.472E+013	0.216	17.428	57.431	57.247	90.000	1.898	3	7.426E+013	7.458E+013	0.250	17.496	57.596	57.352	90.000	2.414	4	7.695E+013	7.733E+013	0.327	16.621	55.595	55.324	90.000	1.493	5	7.571E+013	7.623E+013	0.584	17.015	56.500	56.121	90.000	3.257
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 1        | 2     | 3  | 4      | 5    | 6 | 7 | 8     | 9      | 10      | 11                   | 12  | 13   | 14       | 15 | 16       | 17 | 18  | 19   | 20   | 21     | 22     | 23      | 24           | 25              | 26       | 27       | 28       | 29       | 30       | 31       | 32       | 33       | 34       | 35       | 36       | 37       | 38       | 39       | 40       | 41       | 42       | 43       | 44       | 45        | 46       | 47       | 48       | 49       | 50        | 51        | 52       | 53 | 54       | 55       | 56    | 57     | 58     | 59     | 60 | 61    | 62 | 63       | 64       | 65    | 66     | 67     | 68     | 69 | 70    | 71 | 72       | 73       | 74   | 75     | 76     | 77     | 78 | 79    | 80 | 81       | 82       | 83    | 84     | 85     | 86     | 87 | 88    | 89 | 90       | 91       | 92    | 93     | 94   | 95     | 96 | 97    |
 | 
				
			||||||
 | 
					|----------|-------|----|--------|------|---|---|-------|--------|---------|----------------------|-----|------|----------|----|----------|----|-----|------|------|--------|--------|---------|--------------|-----------------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|-----------|----------|----------|----------|----------|-----------|-----------|----------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|--------|--------|----|-------|----|----------|----------|-------|--------|------|--------|----|-------|
 | 
				
			||||||
 | 
					| UniqueId | HGCV2 | 46 | 667776 | 5159 | - | - | ZONE2 | 667776 | 5PT MES | 4/25/2025 8:40:01 AM | 150 | 1.02 | 2.13E-02 | N  | PARALLEL | -5 | -20 | 2500 | 2000 | 6IN5PT | 6IN5PT | SSMDATA | 6_5PT10M.PAT | ASTM: F723 - 82 | 7.60E+13 | 2.35E+00 | 2.80E+00 | 7.63E+13 | 2.35E+00 | 2.77E+00 | 3.34E-01 | 4.37E+01 | 4.61E+01 | 1.71E+01 | 2.05E+00 | 2.56E+00 | 5.63E+01 | 2.32E+00 | 2.78E+00 | 5.61E+01 | 2.32E+00 | 2.75E+00 | 9.00E+01 | -1.00E+00 | 0.00E+00 | 2.25E+00 | 2.93E+01 | 3.71E+01 | -1.00E+00 | -1.00E+00 | 0.00E+00 | 1  | 7.85E+13 | 7.88E+13 | 0.294 | 17.109 | 54.482 | 54.286 | 90 | 2.193 | 2  | 7.45E+13 | 7.47E+13 | 0.216 | 17.428 | 57.431 | 57.247 | 90 | 1.898 | 3  | 7.43E+13 | 7.46E+13 | 0.25 | 17.496 | 57.596 | 57.352 | 90 | 2.414 | 4  | 7.70E+13 | 7.73E+13 | 0.327 | 16.621 | 55.595 | 55.324 | 90 | 1.493 | 5  | 7.57E+13 | 7.62E+13 | 0.584 | 17.015 | 56.5 | 56.121 | 90 | 3.257 |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<1>:UniqueId
 | 
				
			||||||
 | 
					<2>:HGCV2
 | 
				
			||||||
 | 
					<3>:46
 | 
				
			||||||
 | 
					<4>:667776
 | 
				
			||||||
 | 
					<5>:5159
 | 
				
			||||||
 | 
					<6>:-
 | 
				
			||||||
 | 
					<7>:-
 | 
				
			||||||
 | 
					<8>:ZONE2
 | 
				
			||||||
 | 
					<9>:667776
 | 
				
			||||||
 | 
					<10>:5PT MES
 | 
				
			||||||
 | 
					<11>:4/25/2025 8:40:01 AM
 | 
				
			||||||
 | 
					<12>:150
 | 
				
			||||||
 | 
					<13>:1.02
 | 
				
			||||||
 | 
					<14>:0.0213
 | 
				
			||||||
 | 
					<15>:N
 | 
				
			||||||
 | 
					<16>:PARALLEL
 | 
				
			||||||
 | 
					<17>:-5
 | 
				
			||||||
 | 
					<18>:-20
 | 
				
			||||||
 | 
					<19>:2500
 | 
				
			||||||
 | 
					<20>:2000
 | 
				
			||||||
 | 
					<21>:6IN5PT
 | 
				
			||||||
 | 
					<22>:6IN5PT
 | 
				
			||||||
 | 
					<23>:SSMDATA
 | 
				
			||||||
 | 
					<24>:6_5PT10M.PAT
 | 
				
			||||||
 | 
					<25>:ASTM: F723 - 82
 | 
				
			||||||
 | 
					<26>:7.599E+13
 | 
				
			||||||
 | 
					<27>:2.352
 | 
				
			||||||
 | 
					<28>:2.799
 | 
				
			||||||
 | 
					<29>:7.634E+13
 | 
				
			||||||
 | 
					<30>:2.352
 | 
				
			||||||
 | 
					<31>:2.766
 | 
				
			||||||
 | 
					<32>:0.3342
 | 
				
			||||||
 | 
					<33>:43.65
 | 
				
			||||||
 | 
					<34>:46.05
 | 
				
			||||||
 | 
					<35>:17.13
 | 
				
			||||||
 | 
					<36>:2.053
 | 
				
			||||||
 | 
					<37>:2.563
 | 
				
			||||||
 | 
					<38>:56.32
 | 
				
			||||||
 | 
					<39>:2.315
 | 
				
			||||||
 | 
					<40>:2.779
 | 
				
			||||||
 | 
					<41>:56.07
 | 
				
			||||||
 | 
					<42>:2.321
 | 
				
			||||||
 | 
					<43>:2.746
 | 
				
			||||||
 | 
					<44>:90
 | 
				
			||||||
 | 
					<45>:-1
 | 
				
			||||||
 | 
					<46>:0
 | 
				
			||||||
 | 
					<47>:2.251
 | 
				
			||||||
 | 
					<48>:29.31
 | 
				
			||||||
 | 
					<49>:37.13
 | 
				
			||||||
 | 
					<50>:-1
 | 
				
			||||||
 | 
					<51>:-1
 | 
				
			||||||
 | 
					<52>:0
 | 
				
			||||||
 | 
					<53>:1
 | 
				
			||||||
 | 
					<54>:7.854E+13
 | 
				
			||||||
 | 
					<55>:7.882E+13
 | 
				
			||||||
 | 
					<56>:0.294
 | 
				
			||||||
 | 
					<57>:17.109
 | 
				
			||||||
 | 
					<58>:54.482
 | 
				
			||||||
 | 
					<59>:54.286
 | 
				
			||||||
 | 
					<60>:90
 | 
				
			||||||
 | 
					<61>:2.193
 | 
				
			||||||
 | 
					<62>:2
 | 
				
			||||||
 | 
					<63>:7.447E+13
 | 
				
			||||||
 | 
					<64>:7.472E+13
 | 
				
			||||||
 | 
					<65>:0.216
 | 
				
			||||||
 | 
					<66>:17.428
 | 
				
			||||||
 | 
					<67>:57.431
 | 
				
			||||||
 | 
					<68>:57.247
 | 
				
			||||||
 | 
					<69>:90
 | 
				
			||||||
 | 
					<70>:1.898
 | 
				
			||||||
 | 
					<71>:3
 | 
				
			||||||
 | 
					<72>:7.426E+13
 | 
				
			||||||
 | 
					<73>:7.458E+13
 | 
				
			||||||
 | 
					<74>:0.25
 | 
				
			||||||
 | 
					<75>:17.496
 | 
				
			||||||
 | 
					<76>:57.596
 | 
				
			||||||
 | 
					<77>:57.352
 | 
				
			||||||
 | 
					<78>:90
 | 
				
			||||||
 | 
					<79>:2.414
 | 
				
			||||||
 | 
					<80>:4
 | 
				
			||||||
 | 
					<81>:7.695E+13
 | 
				
			||||||
 | 
					<82>:7.733E+13
 | 
				
			||||||
 | 
					<83>:0.327
 | 
				
			||||||
 | 
					<84>:16.621
 | 
				
			||||||
 | 
					<85>:55.595
 | 
				
			||||||
 | 
					<86>:55.324
 | 
				
			||||||
 | 
					<87>:90
 | 
				
			||||||
 | 
					<88>:1.493
 | 
				
			||||||
 | 
					<89>:5
 | 
				
			||||||
 | 
					<90>:7.571E+13
 | 
				
			||||||
 | 
					<91>:7.623E+13
 | 
				
			||||||
 | 
					<92>:0.584
 | 
				
			||||||
 | 
					<93>:17.015
 | 
				
			||||||
 | 
					<94>:56.5
 | 
				
			||||||
 | 
					<95>:56.121
 | 
				
			||||||
 | 
					<96>:90
 | 
				
			||||||
 | 
					<97>:3.257
 | 
				
			||||||
							
								
								
									
										119
									
								
								.vscode/638811672019538124/HGCV2_250425084001000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								.vscode/638811672019538124/HGCV2_250425084001000.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "SentToMetrology": false,
 | 
				
			||||||
 | 
					  "SentToSPC": false,
 | 
				
			||||||
 | 
					  "Area": "2.130E-002",
 | 
				
			||||||
 | 
					  "Ccomp": "1.02",
 | 
				
			||||||
 | 
					  "CellName": "HGCV2",
 | 
				
			||||||
 | 
					  "CondType": "N",
 | 
				
			||||||
 | 
					  "Date": "4/25/2025 8:40:01 AM",
 | 
				
			||||||
 | 
					  "FlatZMean": "1.713e\u002B001",
 | 
				
			||||||
 | 
					  "FlatZRadialGradient": "2.563e\u002B000",
 | 
				
			||||||
 | 
					  "FlatZStdDev": "2.053e\u002B000",
 | 
				
			||||||
 | 
					  "Folder": "SSMDATA",
 | 
				
			||||||
 | 
					  "GLimit": "2000.00",
 | 
				
			||||||
 | 
					  "GradeMean": "2.251e\u002B000",
 | 
				
			||||||
 | 
					  "GradeRadialGradient": "3.713e\u002B001",
 | 
				
			||||||
 | 
					  "GradeStdDev": "2.931e\u002B001",
 | 
				
			||||||
 | 
					  "Id": -1,
 | 
				
			||||||
 | 
					  "Layer": "-",
 | 
				
			||||||
 | 
					  "Lot": "667776",
 | 
				
			||||||
 | 
					  "Model": "PARALLEL",
 | 
				
			||||||
 | 
					  "NAvgMean": "7.599e\u002B013",
 | 
				
			||||||
 | 
					  "NAvgRadialGradient": "2.799e\u002B000",
 | 
				
			||||||
 | 
					  "NAvgStdDev": "2.352e\u002B000",
 | 
				
			||||||
 | 
					  "NslMean": "7.634e\u002B013",
 | 
				
			||||||
 | 
					  "NslRadialGradient": "2.766e\u002B000",
 | 
				
			||||||
 | 
					  "NslStdDev": "2.352e\u002B000",
 | 
				
			||||||
 | 
					  "Operator": "HGCV2",
 | 
				
			||||||
 | 
					  "PSN": "5159",
 | 
				
			||||||
 | 
					  "Pattern": "6_5PT10M.PAT",
 | 
				
			||||||
 | 
					  "PhaseMean": "9.000e\u002B001",
 | 
				
			||||||
 | 
					  "PhaseRadialGradient": "0.000e\u002B000",
 | 
				
			||||||
 | 
					  "PhaseStdDev": "-1.000e\u002B000",
 | 
				
			||||||
 | 
					  "Plan": "5PT MES",
 | 
				
			||||||
 | 
					  "RDS": "667776",
 | 
				
			||||||
 | 
					  "RampRate": "2500",
 | 
				
			||||||
 | 
					  "Reactor": "46",
 | 
				
			||||||
 | 
					  "RhoAvgMean": "5.632e\u002B001",
 | 
				
			||||||
 | 
					  "RhoAvgRadialGradient": "2.779e\u002B000",
 | 
				
			||||||
 | 
					  "RhoAvgStdDev": "2.315e\u002B000",
 | 
				
			||||||
 | 
					  "RhoMethod": "ASTM: F723 - 82",
 | 
				
			||||||
 | 
					  "RhoslMean": "5.607e\u002B001",
 | 
				
			||||||
 | 
					  "RhoslRadialGradient": "2.746e\u002B000",
 | 
				
			||||||
 | 
					  "RhoslStdDev": "2.321e\u002B000",
 | 
				
			||||||
 | 
					  "RsMean": "-1.000e\u002B000",
 | 
				
			||||||
 | 
					  "RsRadialGradient": "0.000e\u002B000",
 | 
				
			||||||
 | 
					  "RsStdDev": "-1.000e\u002B000",
 | 
				
			||||||
 | 
					  "SetupFile": "6IN5PT",
 | 
				
			||||||
 | 
					  "StartVoltage": "-5.00",
 | 
				
			||||||
 | 
					  "StopVoltage": "-20.00",
 | 
				
			||||||
 | 
					  "UniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					  "VdMean": "3.342e-001",
 | 
				
			||||||
 | 
					  "VdRadialGradient": "4.605e\u002B001",
 | 
				
			||||||
 | 
					  "VdStdDev": "4.365e\u002B001",
 | 
				
			||||||
 | 
					  "Wafer": "ZONE2",
 | 
				
			||||||
 | 
					  "WaferSize": "150.00",
 | 
				
			||||||
 | 
					  "Zone": "-",
 | 
				
			||||||
 | 
					  "Details": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "FlatZ": "17.109",
 | 
				
			||||||
 | 
					      "Grade": "2.193",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					      "NAvg": "7.854E\u002B013",
 | 
				
			||||||
 | 
					      "Nsl": "7.882E\u002B013",
 | 
				
			||||||
 | 
					      "Phase": "90.000",
 | 
				
			||||||
 | 
					      "RhoAvg": "54.482",
 | 
				
			||||||
 | 
					      "Rhosl": "54.286",
 | 
				
			||||||
 | 
					      "UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-1",
 | 
				
			||||||
 | 
					      "Vd": "0.294"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "FlatZ": "17.428",
 | 
				
			||||||
 | 
					      "Grade": "1.898",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					      "NAvg": "7.447E\u002B013",
 | 
				
			||||||
 | 
					      "Nsl": "7.472E\u002B013",
 | 
				
			||||||
 | 
					      "Phase": "90.000",
 | 
				
			||||||
 | 
					      "RhoAvg": "57.431",
 | 
				
			||||||
 | 
					      "Rhosl": "57.247",
 | 
				
			||||||
 | 
					      "UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-2",
 | 
				
			||||||
 | 
					      "Vd": "0.216"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "FlatZ": "17.496",
 | 
				
			||||||
 | 
					      "Grade": "2.414",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					      "NAvg": "7.426E\u002B013",
 | 
				
			||||||
 | 
					      "Nsl": "7.458E\u002B013",
 | 
				
			||||||
 | 
					      "Phase": "90.000",
 | 
				
			||||||
 | 
					      "RhoAvg": "57.596",
 | 
				
			||||||
 | 
					      "Rhosl": "57.352",
 | 
				
			||||||
 | 
					      "UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-3",
 | 
				
			||||||
 | 
					      "Vd": "0.250"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "FlatZ": "16.621",
 | 
				
			||||||
 | 
					      "Grade": "1.493",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					      "NAvg": "7.695E\u002B013",
 | 
				
			||||||
 | 
					      "Nsl": "7.733E\u002B013",
 | 
				
			||||||
 | 
					      "Phase": "90.000",
 | 
				
			||||||
 | 
					      "RhoAvg": "55.595",
 | 
				
			||||||
 | 
					      "Rhosl": "55.324",
 | 
				
			||||||
 | 
					      "UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-4",
 | 
				
			||||||
 | 
					      "Vd": "0.327"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "FlatZ": "17.015",
 | 
				
			||||||
 | 
					      "Grade": "3.257",
 | 
				
			||||||
 | 
					      "HeaderUniqueId": "HGCV2_46-667776-5159_202504250840019538",
 | 
				
			||||||
 | 
					      "NAvg": "7.571E\u002B013",
 | 
				
			||||||
 | 
					      "Nsl": "7.623E\u002B013",
 | 
				
			||||||
 | 
					      "Phase": "90.000",
 | 
				
			||||||
 | 
					      "RhoAvg": "56.500",
 | 
				
			||||||
 | 
					      "Rhosl": "56.121",
 | 
				
			||||||
 | 
					      "UniqueId": "HGCV2_46-667776-5159_202504250840019538_Item-5",
 | 
				
			||||||
 | 
					      "Vd": "0.584"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										47
									
								
								.vscode/638811672019538124/HGCV2_250425084001000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								.vscode/638811672019538124/HGCV2_250425084001000.pdsf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					HEADER_TAG	HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT	2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES	0001
 | 
				
			||||||
 | 
					HEADER_OFFSET	H#######T
 | 
				
			||||||
 | 
					DATA_OFFSET	D#######T
 | 
				
			||||||
 | 
					END_OFFSET	E#######T
 | 
				
			||||||
 | 
					"Time"	"A_LOGISTICS"	"B_LOGISTICS"	"Test"	"Count"	"Index"	"MesEntity"	"Date"	"Employee"	"Lot"	"PSN"	"Reactor"	"Recipe"	"Area"	"Folder"	"HeaderUniqueId"	"Id"	"Layer"	"Model"	"Pattern"	"Phase"	"Plan"	"RampRate"	"RDS"	"SetupFile"	"StartVoltage"	"StopVoltage"	"UniqueId"	"Wafer"	"WaferSize"	"Zone"	"Ccomp"	"CondType"	"FlatZ"	"FlatZMean"	"FlatZRadialGradient"	"FlatZStdDev"	"GLimit"	"Grade"	"GradeMean"	"GradeRadialGradient"	"GradeStdDev"	"NAvg"	"NAvgMean"	"NAvgRadialGradient"	"NAvgStdDev"	"Nsl"	"NslMean"	"NslRadialGradient"	"NslStdDev"	"PhaseMean"	"PhaseRadialGradient"	"PhaseStdDev"	"RhoAvg"	"RhoAvgMean"	"RhoAvgRadialGradient"	"RhoAvgStdDev"	"RhoMethod"	"Rhosl"	"RhoslMean"	"RhoslRadialGradient"	"RhoslStdDev"	"RsMean"	"RsRadialGradient"	"RsStdDev"	"Vd"	"VdMean"	"VdRadialGradient"	"VdStdDev"	"Variation"	"AreaDeltaFromLastRun"	"Nine10mmEdgeMean"	"Nine4mmEdgeMean"	"NineCriticalPointsAverage"	"NineCriticalPointsPhaseAngleAverage"	"NineCriticalPointsStdDev"	"NineEdgeMeanDelta"	"NineMean"	"NineResRangePercent"	"RhoAvg01"	"RhoAvg02"	"RhoAvg03"	"RhoAvg04"	"RhoAvg05"	"RhoAvg06"	"RhoAvg07"	"RhoAvg08"	"RhoAvg09"
 | 
				
			||||||
 | 
					0.00	1	2	23	5	0	HGCV2	4/25/2025 8:40:01 AM		667776	5159	46	Recipe	2.130E-002	SSMDATA	HeaderUniqueId	Id	-	PARALLEL	6_5PT10M.PAT	90.000	5PT MES	2500	667776	6IN5PT	-5.00	-20.00	UniqueId	ZONE2	150.00	-	1.02	N	17.109	1.713e+001	2.563e+000	2.053e+000	2000.00	2.193	2.251e+000	3.713e+001	2.931e+001	7.854E+013	7.599e+013	2.799e+000	2.352e+000	7.882E+013	7.634e+013	2.766e+000	2.352e+000	9.000e+001	0.000e+000	-1.000e+000	54.482	5.632e+001	2.779e+000	2.315e+000	ASTM: F723 - 82	54.286	5.607e+001	2.746e+000	2.321e+000	-1.000e+000	0.000e+000	-1.000e+000	0.294	3.342e-001	4.605e+001	4.365e+001											54.482								
 | 
				
			||||||
 | 
					0.00	1	2	23	5	1	HGCV2	4/25/2025 8:40:01 AM		667776	5159	46	Recipe	2.130E-002	SSMDATA	HeaderUniqueId	Id	-	PARALLEL	6_5PT10M.PAT	90.000	5PT MES	2500	667776	6IN5PT	-5.00	-20.00	UniqueId	ZONE2	150.00	-	1.02	N	17.428	1.713e+001	2.563e+000	2.053e+000	2000.00	1.898	2.251e+000	3.713e+001	2.931e+001	7.447E+013	7.599e+013	2.799e+000	2.352e+000	7.472E+013	7.634e+013	2.766e+000	2.352e+000	9.000e+001	0.000e+000	-1.000e+000	57.431	5.632e+001	2.779e+000	2.315e+000	ASTM: F723 - 82	57.247	5.607e+001	2.746e+000	2.321e+000	-1.000e+000	0.000e+000	-1.000e+000	0.216	3.342e-001	4.605e+001	4.365e+001												57.431							
 | 
				
			||||||
 | 
					0.00	1	2	23	5	2	HGCV2	4/25/2025 8:40:01 AM		667776	5159	46	Recipe	2.130E-002	SSMDATA	HeaderUniqueId	Id	-	PARALLEL	6_5PT10M.PAT	90.000	5PT MES	2500	667776	6IN5PT	-5.00	-20.00	UniqueId	ZONE2	150.00	-	1.02	N	17.496	1.713e+001	2.563e+000	2.053e+000	2000.00	2.414	2.251e+000	3.713e+001	2.931e+001	7.426E+013	7.599e+013	2.799e+000	2.352e+000	7.458E+013	7.634e+013	2.766e+000	2.352e+000	9.000e+001	0.000e+000	-1.000e+000	57.596	5.632e+001	2.779e+000	2.315e+000	ASTM: F723 - 82	57.352	5.607e+001	2.746e+000	2.321e+000	-1.000e+000	0.000e+000	-1.000e+000	0.250	3.342e-001	4.605e+001	4.365e+001													57.596						
 | 
				
			||||||
 | 
					0.00	1	2	23	5	3	HGCV2	4/25/2025 8:40:01 AM		667776	5159	46	Recipe	2.130E-002	SSMDATA	HeaderUniqueId	Id	-	PARALLEL	6_5PT10M.PAT	90.000	5PT MES	2500	667776	6IN5PT	-5.00	-20.00	UniqueId	ZONE2	150.00	-	1.02	N	16.621	1.713e+001	2.563e+000	2.053e+000	2000.00	1.493	2.251e+000	3.713e+001	2.931e+001	7.695E+013	7.599e+013	2.799e+000	2.352e+000	7.733E+013	7.634e+013	2.766e+000	2.352e+000	9.000e+001	0.000e+000	-1.000e+000	55.595	5.632e+001	2.779e+000	2.315e+000	ASTM: F723 - 82	55.324	5.607e+001	2.746e+000	2.321e+000	-1.000e+000	0.000e+000	-1.000e+000	0.327	3.342e-001	4.605e+001	4.365e+001														55.595					
 | 
				
			||||||
 | 
					0.00	1	2	23	5	4	HGCV2	4/25/2025 8:40:01 AM		667776	5159	46	Recipe	2.130E-002	SSMDATA	HeaderUniqueId	Id	-	PARALLEL	6_5PT10M.PAT	90.000	5PT MES	2500	667776	6IN5PT	-5.00	-20.00	UniqueId	ZONE2	150.00	-	1.02	N	17.015	1.713e+001	2.563e+000	2.053e+000	2000.00	3.257	2.251e+000	3.713e+001	2.931e+001	7.571E+013	7.599e+013	2.799e+000	2.352e+000	7.623E+013	7.634e+013	2.766e+000	2.352e+000	9.000e+001	0.000e+000	-1.000e+000	56.500	5.632e+001	2.779e+000	2.315e+000	ASTM: F723 - 82	56.121	5.607e+001	2.746e+000	2.321e+000	-1.000e+000	0.000e+000	-1.000e+000	0.584	3.342e-001	4.605e+001	4.365e+001															56.500				
 | 
				
			||||||
 | 
					NUM_DATA_ROWS	000000005
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS	000000088
 | 
				
			||||||
 | 
					DELIMITER	;
 | 
				
			||||||
 | 
					START_TIME_FORMAT	MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME	04/25/2025 08:40:01
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN	B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1	A_HeaderId=241989;A_SubgroupId=1745595622;A_BASIC_TYPE=;A_INFO=202504250840019538.pcl.csv;A_INFO2=5;A_JOBID=HGCV2;A_MES_ENTITY=HGCV2;A_MID=46-667776-5159;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811672019538124;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2	B_HeaderId=241989;B_SubgroupId=1745595622;B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667776;B_NULL_DATA=;B_PPID=6_5PT10M.PAT;B_PROCESS_JOBID=46;B_PRODUCT=5159;B_SEQUENCE=638811672019538124;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					HEADER_TAG|HEADER_VALUE
 | 
				
			||||||
 | 
					FORMAT|2.00
 | 
				
			||||||
 | 
					NUMBER_PASSES|0001
 | 
				
			||||||
 | 
					HEADER_OFFSET|000004856
 | 
				
			||||||
 | 
					DATA_OFFSET|000000128
 | 
				
			||||||
 | 
					END_OFFSET|000005521
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|Time|A_LOGISTICS|B_LOGISTICS|Count|Sequence|MesEntity|Index|Operator|StartVoltage|Wafer|StopVoltage|Lot|RampRate|Plan|GLimit|Date|Time|SetupFile|WaferSize|Folder|Ccomp|Pattern|Area|CondType|RhoMethod|Model|MeanNAvg|MeanNsl|MeanVd|MeanFlatZ|MeanRhoAvg|MeanRhosl|MeanPhase|MeanGrade|MeanRs|StandardDeviationPercentageNAvg|StandardDeviationPercentageNsl|StandardDeviationPercentageVd|StandardDeviationPercentageFlatZ|StandardDeviationPercentageRhoAvg|StandardDeviationPercentageRhosl|StandardDeviationPercentagePhase|StandardDeviationPercentageGrade|StandardDeviationPercentageRs|RadialGradientNAvg|RadialGradientNsl|RadialGradientVd|RadialGradientFlatZ|RadialGradientRhoAvg|RadialGradientRhosl|RadialGradientPhase|RadialGradientGrade|RadialGradientRs|Site|X|Y|NAvg|RhoAvg|Nsl|Rhosl|Vd|Phase|FlatZ|Grade|XLeft|XRight|BottomY|TopY|RDS|PSN|Reactor|Layer|Zone|Employee|InferredLot|Nine10mmEdgeMean|Nine4mmEdgeMean|NineCriticalPointsAverage|NineCriticalPointsPhaseAngleAverage|NineCriticalPointsStdDev|NineEdgeMeanDelta|NineMean|NineResRangePercent|AreaDeltaFromLastRun|Variation|Percentage HgCV 4PP Delta|RhoAvg01|RhoAvg02|RhoAvg03|RhoAvg04|RhoAvg05|RhoAvg06|RhoAvg07|RhoAvg08|RhoAvg09|EventId|
 | 
				
			||||||
 | 
					|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
 | 
				
			||||||
 | 
					0.00|1|2|5|638811672019538124|HGCV2|0|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|1|0.0|0.0|7.854E+013|54.482|7.882E+013|54.286|0.294|90.000|17.109|2.193|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||54.482|||||||||23
 | 
				
			||||||
 | 
					0.00|1|2|5|638811672019538124|HGCV2|1|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|2|56.3|32.5|7.447E+013|57.431|7.472E+013|57.247|0.216|90.000|17.428|1.898|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159|||||||||||||57.431||||||||23
 | 
				
			||||||
 | 
					0.00|1|2|5|638811672019538124|HGCV2|2|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|3|-32.5|56.3|7.426E+013|57.596|7.458E+013|57.352|0.250|90.000|17.496|2.414|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||||57.596|||||||23
 | 
				
			||||||
 | 
					0.00|1|2|5|638811672019538124|HGCV2|3|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|4|-56.3|-32.5|7.695E+013|55.595|7.733E+013|55.324|0.327|90.000|16.621|1.493|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159|||||||||||||||55.595||||||23
 | 
				
			||||||
 | 
					0.00|1|2|5|638811672019538124|HGCV2|4|PROBE 2|-5.00|ZONE2|-20.00|667776|2500|5PT MES|2000.00|4/25/2025 8:40:01 AM|11:57:16 AM|6IN5PT|150.00|SSMDATA|1.02|6_5PT10M.PAT|2.130E-002|N|ASTM: F723 - 82|PARALLEL|7.599e+013|7.634e+013|3.342e-001|1.713e+001|5.632e+001|5.607e+001|9.000e+001|2.251e+000|-1.000e+000|2.352e+000|2.352e+000|4.365e+001|2.053e+000|2.315e+000|2.321e+000|-1.000e+000|2.931e+001|-1.000e+000|2.799e+000|2.766e+000|4.605e+001|2.563e+000|2.779e+000|2.746e+000|0.000e+000|3.713e+001|0.000e+000|5|32.5|-56.3|7.571E+013|56.500|7.623E+013|56.121|0.584|90.000|17.015|3.257|9.00E+000|1.80E+001|13|14|667776|5159|46|-|-||46-667776-5159||||||||||||||||56.500|||||23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUM_DATA_ROWS|000000005
 | 
				
			||||||
 | 
					NUM_DATA_COLUMNS|000000096
 | 
				
			||||||
 | 
					DELIMITER|;
 | 
				
			||||||
 | 
					START_TIME_FORMAT|MM/dd/yyyy HH:mm:ss
 | 
				
			||||||
 | 
					START_TIME|04/25/2025 08:40:01
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|A_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_COLUMN|B_LOGISTICS
 | 
				
			||||||
 | 
					LOGISTICS_1|A_BASIC_TYPE=;A_INFO=202504250840019538.pcl.csv;A_INFO2=5;A_JOBID=HGCV2;A_MES_ENTITY=HGCV2;A_MID=46-667776-5159;A_NULL_DATA=;A_PPID=NO_PPID;A_PROCESS_JOBID=;A_PRODUCT=;A_SEQUENCE=638811672019538124;A_WAFER_ID=;A_WAFER_POS=;
 | 
				
			||||||
 | 
					LOGISTICS_2|B_BASIC_TYPE=- EpiPro 5000;B_INFO=-;B_INFO2=;B_JOBID=;B_MES_ENTITY=;B_MID=667776;B_NULL_DATA=;B_PPID=6_5PT10M.PAT;B_PROCESS_JOBID=46;B_PRODUCT=5159;B_SEQUENCE=638811672019538124;B_WAFER_ID=-;B_WAFER_POS=-;
 | 
				
			||||||
 | 
					END_HEADER
 | 
				
			||||||
							
								
								
									
										3337
									
								
								.vscode/METROLOGY_SERVICES.vba
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3337
									
								
								.vscode/METROLOGY_SERVICES.vba
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "files.associations": {
 | 
				
			||||||
 | 
					        "*.txt": "vba"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "cSpell.words": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -51,11 +51,11 @@ RETURN Result
 | 
				
			|||||||
Create:
 | 
					Create:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
obj_AppWindow('Create')
 | 
						obj_AppWindow('Create')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
 | 
						Set_Property(@WINDOW,'STATUSLINE',@WINDOW:'.STATUSLINE_FIX')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
GOSUB Refresh
 | 
						GOSUB Refresh
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,61 +77,58 @@ ReactNoGF:
 | 
				
			|||||||
LUReactor:
 | 
					LUReactor:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
						IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
				
			||||||
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
						IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
Set_Status(0)
 | 
						Set_Status(0)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
TypeOver = ''
 | 
						TypeOver = ''
 | 
				
			||||||
TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
						TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
				
			||||||
TypeOver<PTYPE$> 	= 'E'		;* Return entire row
 | 
						TypeOver<PTYPE$> 	= 'E'		;* Return entire row
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
 | 
						ReactData = Popup(@WINDOW,TypeOver,'REACTORS')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
IF ReactData = '' THEN RETURN
 | 
						IF ReactData = '' THEN RETURN
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
 | 
						Set_Property(@WINDOW:'.REACT_NO','LIST',ReactData)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
 | 
						LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
 | 
				
			||||||
ColCnt = 7
 | 
						ColCnt = 7
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
FOR Line = 1 TO LineCnt
 | 
						FOR Line = 1 TO LineCnt
 | 
				
			||||||
		FOR Column = 2 TO ColCnt
 | 
							FOR Column = 2 TO ColCnt
 | 
				
			||||||
			stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
								stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
				
			||||||
		NEXT Column
 | 
							NEXT Column
 | 
				
			||||||
NEXT Line
 | 
						NEXT Line
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
Cancel:
 | 
					Cancel:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
End_Dialog(@WINDOW,'')
 | 
						End_Dialog(@WINDOW,'')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
PostEntries:
 | 
					PostEntries:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
						ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
				
			||||||
Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
						Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
LOOP
 | 
						LOOP
 | 
				
			||||||
		TestChar = ReactNos[-1,1]
 | 
							TestChar = ReactNos[-1,1]
 | 
				
			||||||
UNTIL TestChar NE @VM OR ReactNos = ''
 | 
						UNTIL TestChar NE @VM OR ReactNos = ''
 | 
				
			||||||
		ReactNos[-1,1] = ''
 | 
							ReactNos[-1,1] = ''
 | 
				
			||||||
REPEAT
 | 
						REPEAT
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
EventKeys = ''		;* Keys to return to the REACT_EVENT window for a browse of the newly created records
 | 
						EventKeys = ''		;* Keys to return to the REACT_EVENT window for a browse of the newly created records
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
IF ReactNos NE '' AND Comment NE '' THEN
 | 
						IF ReactNos NE '' AND Comment NE '' THEN
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		EventDTM	= OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')	;* Same DTM for all new records
 | 
							EventDTM	= OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')	;* Same DTM for all new records
 | 
				
			||||||
		EventType	= 'PD'											;* Passdown
 | 
							EventType	= 'PD'											;* Passdown
 | 
				
			||||||
@ -144,15 +141,21 @@ IF ReactNos NE '' AND Comment NE '' THEN
 | 
				
			|||||||
			CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
								CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
								obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								ErrCode = ''
 | 
				
			||||||
 | 
								If Get_Status(ErrCode) then
 | 
				
			||||||
 | 
									Msg(@Window, '', 'OK', '', 'Process Error':@FM:'Error posting entries. ':ErrCode)
 | 
				
			||||||
 | 
								end else
 | 
				
			||||||
 | 
									Set_Property(@Window:'.REACT_NO', 'LIST', '')
 | 
				
			||||||
 | 
									Set_Property(@Window:'.COMMENT', 'TEXT', '')
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
								EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
				
			||||||
		NEXT I
 | 
							NEXT I
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
END
 | 
						END else
 | 
				
			||||||
 | 
							Msg(@Window, '', 'OK', '', 'Process Error':@FM:'React No(s) and Comment must not be null!')
 | 
				
			||||||
End_Dialog(@WINDOW,EventKeys)
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -582,10 +582,6 @@ Refresh:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    If @WINDOW EQ 'RDS_UNLOAD' then
 | 
					    If @WINDOW EQ 'RDS_UNLOAD' then
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        If (DevelopmentFlag EQ True$) then
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
		CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
							CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
				
			||||||
		Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
							Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
				
			||||||
		Set_Property(CtrlName, 'VISIBLE', True$)
 | 
							Set_Property(CtrlName, 'VISIBLE', True$)
 | 
				
			||||||
@ -709,42 +705,6 @@ Refresh:
 | 
				
			|||||||
		END ELSE
 | 
							END ELSE
 | 
				
			||||||
			Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
								Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
				
			||||||
		END
 | 
							END
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
        end else
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            CtrlName = @WINDOW:'.MET_TEST'                
 | 
					 | 
				
			||||||
            Set_Property(@Window : '.EDT_QA_MET', 'VISIBLE', False$)
 | 
					 | 
				
			||||||
            Set_Property(CtrlName, 'VISIBLE', True$)
 | 
					 | 
				
			||||||
            MetList = Get_Property(CtrlName,'LIST')
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            MLCnt = COUNT(MetList,@FM) + (MetList NE '')
 | 
					 | 
				
			||||||
            FOR Line = 1 TO MLCnt
 | 
					 | 
				
			||||||
                IF MetList<Line,COL$MET_TEST> NE '' THEN
 | 
					 | 
				
			||||||
                    BEGIN CASE
 | 
					 | 
				
			||||||
                        CASE MetList<Line,COL$MET_RESULT> = '' 
 | 
					 | 
				
			||||||
                            Color = YELLOW$
 | 
					 | 
				
			||||||
                        CASE MetList<Line,COL$MET_RESULT> < MetList<Line,COL$MET_MIN> OR MetList<Line,COL$MET_RESULT> > MetList<Line,COL$MET_MAX>
 | 
					 | 
				
			||||||
                            Color = RED$
 | 
					 | 
				
			||||||
                        CASE 1
 | 
					 | 
				
			||||||
                            Color = GREEN$
 | 
					 | 
				
			||||||
                    END CASE
 | 
					 | 
				
			||||||
                    
 | 
					 | 
				
			||||||
                END	ELSE
 | 
					 | 
				
			||||||
                    Color = GREEN$
 | 
					 | 
				
			||||||
                END;* End of check for Met Test on the current line
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
					 | 
				
			||||||
            NEXT Line
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            IF MemberOf(@USER4, 'OI_ADMIN') THEN
 | 
					 | 
				
			||||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
 | 
					 | 
				
			||||||
            END ELSE
 | 
					 | 
				
			||||||
                Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
 | 
					 | 
				
			||||||
            END
 | 
					 | 
				
			||||||
        end	
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
    * End of check for Unload OR Post_Epi windows
 | 
					    * End of check for Unload OR Post_Epi windows
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -2669,9 +2629,8 @@ MetTestDC:
 | 
				
			|||||||
    Lines	  = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
 | 
					    Lines	  = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
 | 
				
			||||||
    TestLine  = Lines<CurrRow>
 | 
					    TestLine  = Lines<CurrRow>
 | 
				
			||||||
    LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
 | 
					    LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
 | 
				
			||||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    If (DevelopmentFlag EQ True$) and (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$)  then
 | 
					    If (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$)  then
 | 
				
			||||||
        Ctrls := @WINDOW:'.EDT_QA_MET':@RM	; Props := 'SELPOS':@RM
 | 
					        Ctrls := @WINDOW:'.EDT_QA_MET':@RM	; Props := 'SELPOS':@RM
 | 
				
			||||||
        Ctrls := @WINDOW:'.EDT_QA_MET'		; Props := 'LIST'
 | 
					        Ctrls := @WINDOW:'.EDT_QA_MET'		; Props := 'LIST'
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
@ -2708,8 +2667,7 @@ MetTestDC:
 | 
				
			|||||||
    BEGIN CASE
 | 
					    BEGIN CASE
 | 
				
			||||||
        CASE MetTest EQ ''
 | 
					        CASE MetTest EQ ''
 | 
				
			||||||
            Null
 | 
					            Null
 | 
				
			||||||
        
 | 
					        CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
 | 
				
			||||||
        CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
 | 
					 | 
				
			||||||
            ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
 | 
					            ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
 | 
				
			||||||
            Send_Event(@Window, "READ")
 | 
					            Send_Event(@Window, "READ")
 | 
				
			||||||
        CASE Otherwise$
 | 
					        CASE Otherwise$
 | 
				
			||||||
@ -2863,9 +2821,6 @@ return
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
RefreshWaferCounterData:
 | 
					RefreshWaferCounterData:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
					 | 
				
			||||||
    If WCCheckEnabled then
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
						Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
				
			||||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
						Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
				
			||||||
	QtyBackColor = GREEN$
 | 
						QtyBackColor = GREEN$
 | 
				
			||||||
@ -2908,12 +2863,5 @@ RefreshWaferCounterData:
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    end else
 | 
					 | 
				
			||||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
					 | 
				
			||||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1107,9 +1107,6 @@ SignSupVer:
 | 
				
			|||||||
        END
 | 
					        END
 | 
				
			||||||
    END
 | 
					    END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
					 | 
				
			||||||
    If WCCheckEnabled then
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
	****************************************
 | 
						****************************************
 | 
				
			||||||
	* Verify the Wafer Counter information *
 | 
						* Verify the Wafer Counter information *
 | 
				
			||||||
	****************************************
 | 
						****************************************
 | 
				
			||||||
@ -1129,7 +1126,6 @@ SignSupVer:
 | 
				
			|||||||
		ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
							ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
				
			||||||
		RETURN 0
 | 
							RETURN 0
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    **************************
 | 
					    **************************
 | 
				
			||||||
    * Verify user's password *
 | 
					    * Verify user's password *
 | 
				
			||||||
@ -2294,9 +2290,6 @@ return
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
RefreshWaferCounterData:
 | 
					RefreshWaferCounterData:
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
					 | 
				
			||||||
    If WCCheckEnabled then
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
						Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
				
			||||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
						Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
				
			||||||
	QtyBackColor = GREEN$
 | 
						QtyBackColor = GREEN$
 | 
				
			||||||
@ -2341,10 +2334,5 @@ RefreshWaferCounterData:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    end else
 | 
					 | 
				
			||||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
					 | 
				
			||||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
 | 
					 | 
				
			||||||
    end    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -881,10 +881,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
    ******************************************
 | 
					    ******************************************
 | 
				
			||||||
    * Verify Unload Stage QA Metrology Tests *
 | 
					    * Verify Unload Stage QA Metrology Tests *
 | 
				
			||||||
    ******************************************
 | 
					    ******************************************
 | 
				
			||||||
 | 
					 | 
				
			||||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    If (DevelopmentFlag EQ True$) then
 | 
					 | 
				
			||||||
	WOMatQAKey  = WONo : '*' : CassNo
 | 
						WOMatQAKey  = WONo : '*' : CassNo
 | 
				
			||||||
	WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
						WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
				
			||||||
	OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
						OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
				
			||||||
@ -898,7 +894,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
		ErrMsg(ErrorMsg)
 | 
							ErrMsg(ErrorMsg)
 | 
				
			||||||
		Return
 | 
							Return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    *******************************************
 | 
					    *******************************************
 | 
				
			||||||
    * Verify if all steps have been completed *
 | 
					    * Verify if all steps have been completed *
 | 
				
			||||||
@ -1965,7 +1960,3 @@ ClearForm:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -259,7 +259,7 @@ end service
 | 
				
			|||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service GetWaferMapProductionPath()
 | 
					Service GetWaferMapProductionPath()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData'
 | 
					    ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData_'
 | 
				
			||||||
    Response       = ProductionPath
 | 
					    Response       = ProductionPath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@ Compile function Lot_Services(@Service, @Params)
 | 
				
			|||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function TEST_WAFER_PROD_SERVICES, SRP_Datetime, Datetime, Database_Services, Lot_Services, Error_Services, RTI_CREATEGUID
 | 
					Declare function TEST_WAFER_PROD_SERVICES, SRP_Datetime, Datetime, Database_Services, Lot_Services, Error_Services, RTI_CREATEGUID
 | 
				
			||||||
Declare function SRP_Array, SRP_Json, Environment_Services, Logging_Services, MemberOf, Lot_Event_Services
 | 
					Declare function SRP_Array, SRP_Json, Environment_Services, Logging_Services, MemberOf, Lot_Event_Services, GetTickCount
 | 
				
			||||||
Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services
 | 
					Declare subroutine Database_Services, Btree.Extract, Lot_Services, Error_Services, Labeling_Services, SRP_Json, Logging_Services
 | 
				
			||||||
Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services
 | 
					Declare subroutine SRP_Run_Command, Service_Services, obj_notes, Lot_Event_Services, Mona_Services
 | 
				
			||||||
$insert APP_INSERTS
 | 
					$insert APP_INSERTS
 | 
				
			||||||
$Insert LOT_EQUATES
 | 
					$Insert LOT_EQUATES
 | 
				
			||||||
$Insert TEST_WAFER_PROD_EQUATES
 | 
					$Insert TEST_WAFER_PROD_EQUATES
 | 
				
			||||||
@ -38,6 +38,13 @@ objLotClosureLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',',
 | 
				
			|||||||
Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE'
 | 
					Options EVENT_TYPES = 'MOVE_IN', 'MOVE_OUT', 'HOLD_ON', 'HOLD_OFF', 'REDUCE_WAFER_QTY', 'BONUS_WAFER_QTY', 'COMMENT', 'LOCATION', 'LOAD', 'UNSIGN_LOAD', 'TW_USE', 'CLOSE'
 | 
				
			||||||
Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT'
 | 
					Options LOT_TYPES = 'TW', 'RDS', 'WM_OUT', 'WM_IN', 'WO_MAT', 'LOT'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_LOTSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_LOTSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService
 | 
					GoToService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Return Response or ""
 | 
					Return Response or ""
 | 
				
			||||||
@ -113,6 +120,9 @@ Service GenerateNewLotId(LotType)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
 | 
					Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'GetLotIdByLegacyLotIdAndType'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Open 'DICT.LOT' to DictLot then
 | 
						Open 'DICT.LOT' to DictLot then
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        SearchString    = ''
 | 
					        SearchString    = ''
 | 
				
			||||||
@ -130,10 +140,16 @@ Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
 | 
				
			|||||||
    end else
 | 
					    end else
 | 
				
			||||||
        ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.'
 | 
					        ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.'
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
 | 
					Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'CreateNewLot'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    CreatedLotNumber = ''
 | 
					    CreatedLotNumber = ''
 | 
				
			||||||
    ErrorMessage     = ''
 | 
					    ErrorMessage     = ''
 | 
				
			||||||
    Begin Case
 | 
					    Begin Case
 | 
				
			||||||
@ -279,6 +295,8 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
    Response = CreatedLotNumber
 | 
					    Response = CreatedLotNumber
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
End Service
 | 
					End Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -484,6 +502,9 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//Returns a @FM delimited list of operations in sequence
 | 
					//Returns a @FM delimited list of operations in sequence
 | 
				
			||||||
Service GetLotOperationSequence(LotId)
 | 
					Service GetLotOperationSequence(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetLotOperationSequence'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    LotOperationsInSequence = ''
 | 
					    LotOperationsInSequence = ''
 | 
				
			||||||
    If LotID NE '' then
 | 
					    If LotID NE '' then
 | 
				
			||||||
        //Get Operations
 | 
					        //Get Operations
 | 
				
			||||||
@ -496,9 +517,15 @@ Service GetLotOperationSequence(LotId)
 | 
				
			|||||||
        //error: lot id was null
 | 
					        //error: lot id was null
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    Response = LotOperationsInSequence
 | 
					    Response = LotOperationsInSequence
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetLotCurrOperationId(LotId)
 | 
					Service GetLotCurrOperationId(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetLotCurrOperationId'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    CurrOperation = ''
 | 
					    CurrOperation = ''
 | 
				
			||||||
    If LotID NE '' then
 | 
					    If LotID NE '' then
 | 
				
			||||||
        //Get them in sequence first
 | 
					        //Get them in sequence first
 | 
				
			||||||
@ -515,9 +542,15 @@ Service GetLotCurrOperationId(LotId)
 | 
				
			|||||||
        //error: lot id was null
 | 
					        //error: lot id was null
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    Response = CurrOperation
 | 
					    Response = CurrOperation
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetLotCurrOperationName(LotId)
 | 
					Service GetLotCurrOperationName(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetLotCurrOperationName'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    CurrOperationId   = ''
 | 
					    CurrOperationId   = ''
 | 
				
			||||||
    CurrOperationName = ''
 | 
					    CurrOperationName = ''
 | 
				
			||||||
    If LotID NE '' then
 | 
					    If LotID NE '' then
 | 
				
			||||||
@ -536,6 +569,9 @@ Service GetLotCurrOperationName(LotId)
 | 
				
			|||||||
        //error: lot id was null
 | 
					        //error: lot id was null
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    Response = CurrOperationName
 | 
					    Response = CurrOperationName
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
 | 
					Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
 | 
				
			||||||
@ -591,6 +627,9 @@ Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service IsLotMovedIn(LotId)
 | 
					Service IsLotMovedIn(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'IsLotMovedIn'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    Response = ''
 | 
					    Response = ''
 | 
				
			||||||
    If RowExists('LOT', LotId) then
 | 
					    If RowExists('LOT', LotId) then
 | 
				
			||||||
        CurrOperId    = Lot_Services('GetLotCurrOperationId', LotId)
 | 
					        CurrOperId    = Lot_Services('GetLotCurrOperationId', LotId)
 | 
				
			||||||
@ -601,6 +640,9 @@ Service IsLotMovedIn(LotId)
 | 
				
			|||||||
            Response = False$
 | 
					            Response = False$
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service IsOperationCompleted(LotOperationId)
 | 
					Service IsOperationCompleted(LotOperationId)
 | 
				
			||||||
@ -619,6 +661,8 @@ Service IsOperationCompleted(LotOperationId)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service MoveInLot(LotID, Operator)
 | 
					Service MoveInLot(LotID, Operator)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'MoveInLot'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ErrorMessage           = ''
 | 
					    ErrorMessage           = ''
 | 
				
			||||||
    ThisLotCurrOperationID = ''
 | 
					    ThisLotCurrOperationID = ''
 | 
				
			||||||
@ -667,9 +711,15 @@ Service MoveInLot(LotID, Operator)
 | 
				
			|||||||
         Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
					         Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
         Error_Services('Add', ErrorMessage)
 | 
					         Error_Services('Add', ErrorMessage)
 | 
				
			||||||
     end
 | 
					     end
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service MoveOutLot(LotID, Operator)
 | 
					Service MoveOutLot(LotID, Operator)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'MoveOutLot'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	ErrorMessage           = ''
 | 
						ErrorMessage           = ''
 | 
				
			||||||
	ThisLotCurrOperationID = ''
 | 
						ThisLotCurrOperationID = ''
 | 
				
			||||||
	If LotId NE '' then
 | 
						If LotId NE '' then
 | 
				
			||||||
@ -729,6 +779,9 @@ Service MoveOutLot(LotID, Operator)
 | 
				
			|||||||
		Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
							Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
		Error_Services('Add', ErrorMessage)
 | 
							Error_Services('Add', ErrorMessage)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
 | 
					Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
 | 
				
			||||||
@ -855,6 +908,9 @@ Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service OpenLot(LotId)
 | 
					Service OpenLot(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'OpenLot'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    ErrorMessage = ''
 | 
					    ErrorMessage = ''
 | 
				
			||||||
    If RowExists('LOT', LotId) then
 | 
					    If RowExists('LOT', LotId) then
 | 
				
			||||||
        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
					        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
				
			||||||
@ -871,9 +927,15 @@ Service OpenLot(LotId)
 | 
				
			|||||||
    If ErrorMessage NE ''  then
 | 
					    If ErrorMessage NE ''  then
 | 
				
			||||||
        Error_Services('Add', ErrorMessage)
 | 
					        Error_Services('Add', ErrorMessage)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CloseLot(LotId)
 | 
					Service CloseLot(LotId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CloseLot'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    ErrorMessage = ''
 | 
					    ErrorMessage = ''
 | 
				
			||||||
    If RowExists('LOT', LotId) then
 | 
					    If RowExists('LOT', LotId) then
 | 
				
			||||||
        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
					        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
				
			||||||
@ -890,6 +952,9 @@ Service CloseLot(LotId)
 | 
				
			|||||||
    If ErrorMessage NE ''  then
 | 
					    If ErrorMessage NE ''  then
 | 
				
			||||||
        Error_Services('Add', ErrorMessage)
 | 
					        Error_Services('Add', ErrorMessage)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service AutoCloseTestWaferLot(LotId, CloseUserId)
 | 
					Service AutoCloseTestWaferLot(LotId, CloseUserId)
 | 
				
			||||||
@ -989,15 +1054,26 @@ Service AutoCloseTestWaferLot(LotId, CloseUserId)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service HoldLot(LotId, OperatorId)
 | 
					Service HoldLot(LotId, OperatorId)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'HoldLot'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnholdLot(LotId, OperatorId)
 | 
					Service UnholdLot(LotId, OperatorId)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'UnholdLot'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
 | 
					Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'ReduceLotWaferCount'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	ErrorMessage = ''
 | 
						ErrorMessage = ''
 | 
				
			||||||
	If RowExists('LOT', LotId) then
 | 
						If RowExists('LOT', LotId) then
 | 
				
			||||||
		LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
							LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
				
			||||||
@ -1043,9 +1119,15 @@ Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
 | 
				
			|||||||
	if ErrorMessage NE '' then
 | 
						if ErrorMessage NE '' then
 | 
				
			||||||
		Error_Services('Add', ErrorMessage)
 | 
							Error_Services('Add', ErrorMessage)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
 | 
					Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'IncreaseLotWaferCount'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    ErrorMessage = ''
 | 
					    ErrorMessage = ''
 | 
				
			||||||
    If RowExists('LOT', LotId) then
 | 
					    If RowExists('LOT', LotId) then
 | 
				
			||||||
        LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
					        LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
				
			||||||
@ -1087,6 +1169,8 @@ Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
 | 
				
			|||||||
        Error_Services('Add', ErrorMessage)
 | 
					        Error_Services('Add', ErrorMessage)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service OpenOIWizardCreateTWLotInBrowser()
 | 
					Service OpenOIWizardCreateTWLotInBrowser()
 | 
				
			||||||
@ -1095,6 +1179,9 @@ Service OpenOIWizardCreateTWLotInBrowser()
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username)
 | 
					Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'CreateNewVoidedLotRecord'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	ErrorMessage = ''
 | 
						ErrorMessage = ''
 | 
				
			||||||
	If RowExists('LSL_USERS', Username) then
 | 
						If RowExists('LSL_USERS', Username) then
 | 
				
			||||||
		If LotType NE '' then
 | 
							If LotType NE '' then
 | 
				
			||||||
@ -1165,16 +1252,8 @@ Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username
 | 
				
			|||||||
	If ErrorMessage NE ''  then
 | 
						If ErrorMessage NE ''  then
 | 
				
			||||||
		//Todo Log Error Message
 | 
							//Todo Log Error Message
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -388,6 +388,7 @@ end service
 | 
				
			|||||||
// Looks for available Metrology files that are ready to be imported into the MES system.
 | 
					// Looks for available Metrology files that are ready to be imported into the MES system.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service ImportMetrologyFiles(Machine)
 | 
					Service ImportMetrologyFiles(Machine)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	If Machine NE '' then
 | 
						If Machine NE '' then
 | 
				
			||||||
		hSysLists       = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
							hSysLists       = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
				
			||||||
		Lock hSysLists, ServiceKeyID:'*':Machine then
 | 
							Lock hSysLists, ServiceKeyID:'*':Machine then
 | 
				
			||||||
@ -398,10 +399,10 @@ Service ImportMetrologyFiles(Machine)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			Begin Case
 | 
								Begin Case
 | 
				
			||||||
				Case Machine _EQC 'Tencor'
 | 
									Case Machine _EQC 'Tencor'
 | 
				
			||||||
					SearchPattern = '*.txt';
 | 
										SearchPattern = '*.pdsf';
 | 
				
			||||||
					DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
 | 
										DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08DDUPSFS6420\Source\MET08DDUPSFS6420\'
 | 
				
			||||||
				Case Machine _EQC 'HgCV'
 | 
									Case Machine _EQC 'HgCV'
 | 
				
			||||||
					SearchPattern = '*.txt';
 | 
										SearchPattern = '*.pdsf';
 | 
				
			||||||
					DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
 | 
										DataPath = Environment_Services('GetApplicationRootPath') : '\Metrology\MET08RESIHGCV\Source\MET08RESIHGCV\'
 | 
				
			||||||
				Case Machine _EQC 'CDE'
 | 
									Case Machine _EQC 'CDE'
 | 
				
			||||||
					SearchPattern = '*.pdsf';
 | 
										SearchPattern = '*.pdsf';
 | 
				
			||||||
@ -518,6 +519,15 @@ Service ImportMetrologyFiles(Machine)
 | 
				
			|||||||
						END ELSE
 | 
											END ELSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							OSREAD RunData FROM DataPath:FileName THEN
 | 
												OSREAD RunData FROM DataPath:FileName THEN
 | 
				
			||||||
 | 
													Set_Status(0)
 | 
				
			||||||
 | 
													OSWrite RunData to RepoPath:FileName
 | 
				
			||||||
 | 
													status_code = ''
 | 
				
			||||||
 | 
													If Get_Status(status_code) then
 | 
				
			||||||
 | 
														ErrorMessage = 'Error writing run data file to repository: status_code = ' : status_code
 | 
				
			||||||
 | 
														Metrology_Services('LogResults', '', Machine, 'UID001', Service : ' : ' : ErrorMessage)
 | 
				
			||||||
 | 
														Set_Status(0)
 | 
				
			||||||
 | 
													end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
								SWAP '|' WITH @VM IN RunData
 | 
													SWAP '|' WITH @VM IN RunData
 | 
				
			||||||
								SWAP CRLF$ WITH @FM IN RunData
 | 
													SWAP CRLF$ WITH @FM IN RunData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -647,21 +657,42 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Scan the run data for machine specific information. Then call the relevant update service for the specific
 | 
							// Scan the run data for machine specific information. Then call the relevant update service for the specific
 | 
				
			||||||
		// machine.
 | 
							// machine.
 | 
				
			||||||
 | 
							ResourceID      = Field(FileName, ' ', 1, 1)
 | 
				
			||||||
 | 
							IsViewerFile    = Index(FileName, 'Viewer', 1)
 | 
				
			||||||
		Begin Case
 | 
							Begin Case
 | 
				
			||||||
			Case Machine _EQC 'Stratus'
 | 
								Case Machine _EQC 'Stratus'
 | 
				
			||||||
				Metrology_Services('ImportStratusData', RunData)
 | 
									PSN = RunData<9>
 | 
				
			||||||
 | 
									Metrology_Services('ImportStratusData', RunData, ResourceID, PSN)
 | 
				
			||||||
				MachineType@ = 'Stratus'
 | 
									MachineType@ = 'Stratus'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Case Machine _EQC 'Biorad'
 | 
								Case Machine _EQC 'Biorad'
 | 
				
			||||||
				Metrology_Services('ImportBioRadData', RunData, FileName)
 | 
									PSN = RunData<7>
 | 
				
			||||||
 | 
									QualFile = ( (PSN EQ 'T-Low') or (PSN EQ 'T-Mid') or (PSN EQ 'T-High') or (PSN EQ 'T_LOW') or (PSN EQ 'T_MID') or (PSN EQ 'T_HIGH') )
 | 
				
			||||||
 | 
									IF QualFile THEN
 | 
				
			||||||
 | 
										Metrology_Services('ImportBioRadQualData', RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
									END ELSE
 | 
				
			||||||
 | 
										Metrology_Services('ImportBioRadData', RunData, ResourceID, IsViewerFile, PSN, FileName)
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
				MachineType@ = 'Bio-Rad'
 | 
									MachineType@ = 'Bio-Rad'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Case Machine _EQC 'CDE'
 | 
								Case Machine _EQC 'CDE'
 | 
				
			||||||
				Metrology_Services('ImportCDEData', RunData, FileName)
 | 
									PSN = RunData<8>
 | 
				
			||||||
 | 
									QualFile = ( (PSN EQ 'RLOW_STD') or (PSN EQ 'RMID_STD') or (PSN EQ 'RHI_STD') or (PSN EQ 'THINSPC') )
 | 
				
			||||||
 | 
									IF QualFile THEN
 | 
				
			||||||
 | 
										Metrology_Services('ImportCDEQualData', RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
									END ELSE
 | 
				
			||||||
 | 
										Metrology_Services('ImportCDEData', RunData, ResourceID, IsViewerFile, PSN)
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
				MachineType@ = 'CDE'
 | 
									MachineType@ = 'CDE'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Case Machine _EQC 'HgCV'
 | 
								Case Machine _EQC 'HgCV'
 | 
				
			||||||
				Metrology_Services('ImportHgCVData', RunData, FileName)
 | 
									PSN = RunData<5>
 | 
				
			||||||
 | 
									QualFile = ( (PSN EQ 'Low') or (PSN EQ 'Mid') or (PSN EQ 'High') or (PSN EQ 'Thin') )
 | 
				
			||||||
 | 
									IF QualFile THEN
 | 
				
			||||||
 | 
										Metrology_Services('ImportHgCVQualData', RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
									END ELSE
 | 
				
			||||||
 | 
										Metrology_Services('ImportHgCVData', RunData, ResourceID, IsViewerFile, PSN)
 | 
				
			||||||
 | 
									END
 | 
				
			||||||
				MachineType@ = 'HgProbe'
 | 
									MachineType@ = 'HgProbe'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Case Machine _EQC 'SP1'
 | 
								Case Machine _EQC 'SP1'
 | 
				
			||||||
@ -692,7 +723,7 @@ Service ImportMetrologyRunData(Machine, DataPath, FileName, RunData)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ImportStratusData(RunData)
 | 
					Service ImportStratusData(RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Machine           = 'Stratus'
 | 
						Machine           = 'Stratus'
 | 
				
			||||||
	ParseArray        = ''
 | 
						ParseArray        = ''
 | 
				
			||||||
@ -707,7 +738,6 @@ Service ImportStratusData(RunData)
 | 
				
			|||||||
	Recipe            = RunData<6>
 | 
						Recipe            = RunData<6>
 | 
				
			||||||
	Reactor           = RunData<7>
 | 
						Reactor           = RunData<7>
 | 
				
			||||||
	RDSNo             = RunData<8>  ; // If Non-EpiPro this will be an RDS Key, otherwise it will be a work order key.
 | 
						RDSNo             = RunData<8>  ; // If Non-EpiPro this will be an RDS Key, otherwise it will be a work order key.
 | 
				
			||||||
	PSN               = RunData<9>
 | 
					 | 
				
			||||||
	BatchID           = RunData<10>
 | 
						BatchID           = RunData<10>
 | 
				
			||||||
	Cassette          = RunData<11>
 | 
						Cassette          = RunData<11>
 | 
				
			||||||
	ThickAvg          = RunData<12>
 | 
						ThickAvg          = RunData<12>
 | 
				
			||||||
@ -866,18 +896,9 @@ Service ImportStratusData(RunData)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ImportBioRadData(RunData, FileName)
 | 
					Service ImportBioRadQualData(RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Machine           = 'BioRad'
 | 
						Machine           = 'BioRad'
 | 
				
			||||||
	IsProdTest        = False$
 | 
					 | 
				
			||||||
	ParseArray        = ''
 | 
					 | 
				
			||||||
	FieldPos          = 13
 | 
					 | 
				
			||||||
	FieldPosIncrement = 2
 | 
					 | 
				
			||||||
	Offset            = 1
 | 
					 | 
				
			||||||
	Decimals          = 2
 | 
					 | 
				
			||||||
	PSN               = RunData<7>
 | 
					 | 
				
			||||||
	QualFile          = ( (PSN EQ 'T-Low') or (PSN EQ 'T-Mid') or (PSN EQ 'T-High') or (PSN EQ 'T_LOW') or (PSN EQ 'T_MID') or (PSN EQ 'T_HIGH') )
 | 
					 | 
				
			||||||
	If QualFile then
 | 
					 | 
				
			||||||
		ResourceID      = Field(FileName, ' ', 1, 1)
 | 
					 | 
				
			||||||
	URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
						URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
				
			||||||
	TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
						TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
				
			||||||
	If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
 | 
						If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
 | 
				
			||||||
@ -908,9 +929,20 @@ Service ImportBioRadData(RunData, FileName)
 | 
				
			|||||||
	end else
 | 
						end else
 | 
				
			||||||
		Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
							Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end else
 | 
					
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service ImportBioRadData(RunData, ResourceID, IsViewerFile, PSN, FileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Machine           = 'BioRad'
 | 
				
			||||||
 | 
						IsProdTest        = False$
 | 
				
			||||||
 | 
						ParseArray        = ''
 | 
				
			||||||
 | 
						FieldPos          = 13
 | 
				
			||||||
 | 
						FieldPosIncrement = 2
 | 
				
			||||||
 | 
						Offset            = 1
 | 
				
			||||||
 | 
						Decimals          = 2
 | 
				
			||||||
	// RDS Biorad metrology file
 | 
						// RDS Biorad metrology file
 | 
				
			||||||
		IsViewerFile     = Index(FileName, 'Viewer', 1)
 | 
					 | 
				
			||||||
	Timestamp        = RunData<2>
 | 
						Timestamp        = RunData<2>
 | 
				
			||||||
	RDSKeyID         = RunData<6>
 | 
						RDSKeyID         = RunData<6>
 | 
				
			||||||
	RunDataLayer     = RunData<8>
 | 
						RunDataLayer     = RunData<8>
 | 
				
			||||||
@ -935,14 +967,8 @@ Service ImportBioRadData(RunData, FileName)
 | 
				
			|||||||
		RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
 | 
							RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
 | 
				
			||||||
		If Error_Services('NoError') then
 | 
							If Error_Services('NoError') then
 | 
				
			||||||
			WorkOrderNo     = RDSRec<RDS_WO$>
 | 
								WorkOrderNo     = RDSRec<RDS_WO$>
 | 
				
			||||||
 | 
					 | 
				
			||||||
				// HgCV Project Development Code -------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
				DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
				If (DevelopmentFlag EQ True$) then 
 | 
					 | 
				
			||||||
			IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
 | 
								IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
 | 
				
			||||||
			If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
 | 
								If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
				// -------------------------------------------------------------------------------------------------------------     
 | 
					 | 
				
			||||||
			CassNo          = RDSRec<RDS_CASS_NO$>
 | 
								CassNo          = RDSRec<RDS_CASS_NO$>
 | 
				
			||||||
			WorkOrder       = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
 | 
								WorkOrder       = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
 | 
				
			||||||
			GoSub ParseWorkOrder
 | 
								GoSub ParseWorkOrder
 | 
				
			||||||
@ -1226,28 +1252,13 @@ Service ImportBioRadData(RunData, FileName)
 | 
				
			|||||||
			Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
								Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ImportCDEData(RunData, FileName)
 | 
					Service ImportCDEQualData(RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Machine         = 'CDE'
 | 
						Machine         = 'CDE'
 | 
				
			||||||
	ParseArray        = ''
 | 
					 | 
				
			||||||
	FieldPos          = 23
 | 
					 | 
				
			||||||
	FieldPosIncrement = 5
 | 
					 | 
				
			||||||
	Offset            = 3
 | 
					 | 
				
			||||||
	Decimals          = 3
 | 
					 | 
				
			||||||
	Timestamp         = RunData<3>
 | 
					 | 
				
			||||||
	RDSKeyID          = RunData<7>
 | 
					 | 
				
			||||||
	RunDataLayer      = RunData<9>
 | 
					 | 
				
			||||||
	RunDataZone       = RunData<10>
 | 
					 | 
				
			||||||
	ReactorID         = RunData<6>
 | 
					 | 
				
			||||||
	ScanRecipe        = RunData<5>
 | 
					 | 
				
			||||||
	PSN               = RunData<8>
 | 
					 | 
				
			||||||
	QualFile          = ( (PSN EQ 'RLOW_STD') or (PSN EQ 'RMID_STD') or (PSN EQ 'RHI_STD') or (PSN EQ 'THINSPC') )
 | 
					 | 
				
			||||||
	If QualFile then
 | 
					 | 
				
			||||||
	ResourceID      = Field(FileName, ' ', 1, 1)
 | 
						ResourceID      = Field(FileName, ' ', 1, 1)
 | 
				
			||||||
	URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
						URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
				
			||||||
	TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
						TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
				
			||||||
@ -1276,9 +1287,24 @@ Service ImportCDEData(RunData, FileName)
 | 
				
			|||||||
		Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
							Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	end else
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service ImportCDEData(RunData, ResourceID, IsViewerFile, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Machine           = 'CDE'
 | 
				
			||||||
 | 
						ParseArray        = ''
 | 
				
			||||||
 | 
						FieldPos          = 23
 | 
				
			||||||
 | 
						FieldPosIncrement = 5
 | 
				
			||||||
 | 
						Offset            = 3
 | 
				
			||||||
 | 
						Decimals          = 3
 | 
				
			||||||
 | 
						Timestamp         = RunData<3>
 | 
				
			||||||
 | 
						RDSKeyID          = RunData<7>
 | 
				
			||||||
 | 
						RunDataLayer      = RunData<9>
 | 
				
			||||||
 | 
						RunDataZone       = RunData<10>
 | 
				
			||||||
 | 
						ReactorID         = RunData<6>
 | 
				
			||||||
 | 
						ScanRecipe        = RunData<5>
 | 
				
			||||||
	// Regular metrology file
 | 
						// Regular metrology file
 | 
				
			||||||
		IsViewerFile     = Index(FileName, 'Viewer', 1)
 | 
					 | 
				
			||||||
	ToolClassID       = '4PP'
 | 
						ToolClassID       = '4PP'
 | 
				
			||||||
	PatternNameIndex  = RDS_TEST_SPEC_RES_MPATTERN$
 | 
						PatternNameIndex  = RDS_TEST_SPEC_RES_MPATTERN$
 | 
				
			||||||
	ToolClassIndex    = RDS_TEST_SPEC_RES_MTOOL$
 | 
						ToolClassIndex    = RDS_TEST_SPEC_RES_MTOOL$
 | 
				
			||||||
@ -1289,13 +1315,8 @@ Service ImportCDEData(RunData, FileName)
 | 
				
			|||||||
	RDSRec            = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
 | 
						RDSRec            = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
 | 
				
			||||||
	If Error_Services('NoError') then
 | 
						If Error_Services('NoError') then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// HgCV Project Development Code -------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
			DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
			If (DevelopmentFlag EQ True$) then 
 | 
					 | 
				
			||||||
		IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
 | 
							IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
 | 
				
			||||||
		If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
 | 
							If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			// -------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		WorkOrderNo     = RDSRec<RDS_WO$>
 | 
							WorkOrderNo     = RDSRec<RDS_WO$>
 | 
				
			||||||
		CassNo          = RDSRec<RDS_CASS_NO$>
 | 
							CassNo          = RDSRec<RDS_CASS_NO$>
 | 
				
			||||||
@ -1473,27 +1494,13 @@ Service ImportCDEData(RunData, FileName)
 | 
				
			|||||||
	end else
 | 
						end else
 | 
				
			||||||
		Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
							Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service ImportHgCVData(RunData, FileName)
 | 
					Service ImportHgCVQualData(RunData, ResourceID, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Machine         = 'HgCV'    /* Resistivity */
 | 
						Machine         = 'HgCV'    /* Resistivity */
 | 
				
			||||||
	FieldPos          = 53
 | 
					 | 
				
			||||||
	FieldPosIncrement = 9
 | 
					 | 
				
			||||||
	Offset            = 5
 | 
					 | 
				
			||||||
	PhaseOffset       = 7
 | 
					 | 
				
			||||||
	Decimals          = 3
 | 
					 | 
				
			||||||
	Timestamp         = RunData<11>
 | 
					 | 
				
			||||||
	RDSKeyID          = RunData<4>
 | 
					 | 
				
			||||||
	LayerZonePair     = RunData<8>
 | 
					 | 
				
			||||||
	ReactorID         = RunData<3>
 | 
					 | 
				
			||||||
	PSN               = RunData<5>
 | 
					 | 
				
			||||||
	QualFile          = ( (PSN EQ 'Low') or (PSN EQ 'Mid') or (PSN EQ 'High') or (PSN EQ 'Thin') )
 | 
					 | 
				
			||||||
	If QualFile then
 | 
					 | 
				
			||||||
		ResourceID      = Field(FileName, ' ', 1, 1)
 | 
					 | 
				
			||||||
	URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
						URL             = "https://oi-metrology-viewer-prod.mes.infineon.com/api/InfinityQSV3/":ResourceID:"/header"
 | 
				
			||||||
	TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
						TimeoutDuration = HTTPClient_Services('GetTimeoutDuration')
 | 
				
			||||||
	If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
 | 
						If TimeoutDuration NE 30 then Httpclient_Services('SetTimeoutDuration', 30)
 | 
				
			||||||
@ -1520,9 +1527,23 @@ Service ImportHgCVData(RunData, FileName)
 | 
				
			|||||||
	end else
 | 
						end else
 | 
				
			||||||
		Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
							Metrology_Services('LogResults', PSN, Machine, 'UID002', Service : ' : ' : 'Null response from IQS API.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end else
 | 
					
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service ImportHgCVData(RunData, ResourceID, IsViewerFile, PSN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Machine           = 'HgCV'    /* Resistivity */
 | 
				
			||||||
 | 
						FieldPos          = 53
 | 
				
			||||||
 | 
						FieldPosIncrement = 9
 | 
				
			||||||
 | 
						Offset            = 5
 | 
				
			||||||
 | 
						PhaseOffset       = 7
 | 
				
			||||||
 | 
						Decimals          = 3
 | 
				
			||||||
 | 
						Timestamp         = RunData<11>
 | 
				
			||||||
 | 
						RDSKeyID          = RunData<4>
 | 
				
			||||||
 | 
						LayerZonePair     = RunData<8>
 | 
				
			||||||
 | 
						ReactorID         = RunData<3>
 | 
				
			||||||
	// Regular metrology file
 | 
						// Regular metrology file
 | 
				
			||||||
		IsViewerFile     = Index(FileName, 'Viewer', 1)
 | 
					 | 
				
			||||||
	ToolClassID       = 'HGCV'
 | 
						ToolClassID       = 'HGCV'
 | 
				
			||||||
	PatternNameIndex  = RDS_TEST_SPEC_RES_MPATTERN$
 | 
						PatternNameIndex  = RDS_TEST_SPEC_RES_MPATTERN$
 | 
				
			||||||
	ToolClassIndex    = RDS_TEST_SPEC_RES_MTOOL$
 | 
						ToolClassIndex    = RDS_TEST_SPEC_RES_MTOOL$
 | 
				
			||||||
@ -1816,7 +1837,6 @@ Service ImportHgCVData(RunData, FileName)
 | 
				
			|||||||
	end else
 | 
						end else
 | 
				
			||||||
		Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
							Metrology_Services('LogResults', RDSKeyID, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3253,5 +3273,3 @@ LoadRunDataToDatabase:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,7 @@ Parm3:
 | 
				
			|||||||
    -For Metric updates this represents the numeric data that you wish to send.
 | 
					    -For Metric updates this represents the numeric data that you wish to send.
 | 
				
			||||||
***************************************************************/
 | 
					***************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services
 | 
					Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services, Service_Services
 | 
				
			||||||
Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services
 | 
					Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services
 | 
				
			||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,17 +44,31 @@ Options STATES       = 'OK', 'WARNING', 'CRITICAL'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
 | 
					Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	Mona_Services("SendBufferedStatus", MonitorName, StatusName, CurrentState)
 | 
						Mona_Services("PostStatus", MonitorName, StatusName, CurrentState)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service PostStatus(MonitorName, StatusName, CurrentState=STATES)
 | 
				
			||||||
 | 
						Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedStatus':@VM:MonitorName:@VM:StatusName:@VM:CurrentState)
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service SendMetric(MonitorName=MONITORS, MetricName, Number)
 | 
					Service SendMetric(MonitorName=MONITORS, MetricName, Number)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	Mona_Services("SendBufferedAverageMetric", MonitorName, MetricName, Number)
 | 
						Mona_Services("PostAverageMetric", MonitorName, MetricName, Number)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
end Service
 | 
					end Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service PostAverageMetric(MonitorName, MetricName, Number)
 | 
				
			||||||
 | 
						Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedAverageMetric':@VM:MonitorName:@VM:MetricName:@VM:Number)
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service SendCountMetric(MonitorName=MONITORS, MetricName, Number)
 | 
				
			||||||
 | 
						Mona_Services("PostCountMetric", MonitorName, MetricName, Number)
 | 
				
			||||||
 | 
					end Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service PostCountMetric(MonitorName, MetricName, Number)
 | 
				
			||||||
 | 
						Service_Services('PostProcedure', 'MONA_SERVICES', 'SendBufferedCountMetric':@VM:MonitorName:@VM:MetricName:@VM:Number)
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service SendBufferedStatus(MonaResource, StatusName, StatusValue)
 | 
					Service SendBufferedStatus(MonaResource, StatusName, StatusValue)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -172,6 +186,67 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service SendBufferedCountMetric(MonaResource, MetricName, MetricValue)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						If MonaResource EQ '' then
 | 
				
			||||||
 | 
							MonaResource = Environment_Services("GetMonaResource")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						DateTime = SRP_DateTime('Now')
 | 
				
			||||||
 | 
						Year = SRP_Datetime("Year", DateTime)
 | 
				
			||||||
 | 
						Month = SRP_Datetime("Month", DateTime)
 | 
				
			||||||
 | 
						If Len(Month) EQ 1 then
 | 
				
			||||||
 | 
							Month = '0':Month
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						Day = SRP_Datetime("Day", DateTime)
 | 
				
			||||||
 | 
						If Len(Day) EQ 1 then
 | 
				
			||||||
 | 
							Day = '0':Day
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						Hour = SRP_Datetime("Hour", DateTime)
 | 
				
			||||||
 | 
						If Len(Hour) EQ 1 then
 | 
				
			||||||
 | 
							Hour = '0':Hour
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						Minute = SRP_Datetime("Minute", DateTime)
 | 
				
			||||||
 | 
						If Len(Minute) EQ 1 then
 | 
				
			||||||
 | 
							Minute = '0':Minute
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						Second = SRP_Datetime("Second", DateTime)
 | 
				
			||||||
 | 
						If Len(Second) EQ 1 then
 | 
				
			||||||
 | 
							Second = '0':Second
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						RequestBodyJson = '{ "resource": "':MonaResource:'"'
 | 
				
			||||||
 | 
						RequestBodyJson = RequestBodyJson:', "dateTime": "':Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z"'
 | 
				
			||||||
 | 
						RequestBodyJson = RequestBodyJson:', "metricName": "':MetricName:'"'
 | 
				
			||||||
 | 
						RequestBodyJson = RequestBodyJson:', "metricValue": "':MetricValue:'" }'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/count'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						retries = 3
 | 
				
			||||||
 | 
						backoffSeconds = 1
 | 
				
			||||||
 | 
						isSuccessful = False$
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						Loop
 | 
				
			||||||
 | 
							while (isSuccessful EQ False$ and retries GT 0)
 | 
				
			||||||
 | 
								waitSeconds = (3 - retries) * backoffSeconds
 | 
				
			||||||
 | 
								Delay(waitSeconds)
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								retries = retries - 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								If response EQ '"Request queued for processing"' then
 | 
				
			||||||
 | 
									isSuccessful = True$
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
						Repeat
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service QueueLatencyAndCountMetrics(MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
						Diff = EndTick - StartTick
 | 
				
			||||||
 | 
					    Mona_Services('SendMetric', MonaResource, MetricName:'_LATENCY', Diff)
 | 
				
			||||||
 | 
					    Mona_Services('SendCountMetric', MonaResource, MetricName:'_COUNT', 1)
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SwapResourceNames:
 | 
					SwapResourceNames:
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -195,3 +270,4 @@ SwapResourceNames:
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -53,8 +53,10 @@ Return Response or ""
 | 
				
			|||||||
Options BOOLEAN                  = True$, False$
 | 
					Options BOOLEAN                  = True$, False$
 | 
				
			||||||
Options ENTITY_TYPES             = 'REACTOR','REACTOR_LOG'
 | 
					Options ENTITY_TYPES             = 'REACTOR','REACTOR_LOG'
 | 
				
			||||||
Options ORDER_TYPES              = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM','ABORT_ALARM'
 | 
					Options ORDER_TYPES              = 'INTRUSIVE_MAINT','CHANGEOVER','INITIATE_IDLE','IDLE','ASM_HTR_TUBE_CHANGE','ASM_HTR_ANNUAL_PM','ASM_HTR_SEMIANNUAL_PM','ASM_HTR_FIVE_AND_TEN_YEAR_PM','IQS_HGCV_ALARM','ABORT_ALARM'
 | 
				
			||||||
Options ORDER_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
 | 
					Options ORDER_STATUSES           = 'new','in-edit','creating','not-started','in-progress','cancelled','done'
 | 
				
			||||||
Options REACTOR_TYPES            = 'ASM','ASM+','HTR','EPP'
 | 
					Options REACTOR_TYPES            = 'ASM','ASM+','HTR','EPP'
 | 
				
			||||||
 | 
					Options ORDER_CHECKLIST_STATUSES = 'not-started','in-progress','paused','done'
 | 
				
			||||||
 | 
					Options NICA_CHECKLISTS          = 'PROCESS_INTERRUPTION_FLOW_C_PRE','PROCESS_INTERRUPTION_FLOW_A_PRE','PROCESS_INTERRUPTION_FLOW_B_PRE','PROCESS_INTERRUPTION_LAST_KNOWN_PRODUCT_THICKNESS_SHEETRHO','PROCESS_INTERRUPTION_LAST_KNOWN_PRODUCT_VISUAL_INSPECTION','PROCESS_INTERRUPTION_TEST_WAFER','PROCESS_INTERRUPTION_ASM_PARTICLE_QUAL_VISUAL_INSPECTION','PROCESS_INTERRUPTION_HTR_PARTICLE_QUAL_VISUAL_INSPECTION','SUSCEPTOR_PREP','1_PCRC','2_PCRC','BD','INTRINSIC','SPV-FE','CLEANUP','TEST_WAFER_VERIFICATION','PARTICLE_QUAL_ASM','PARTICLE_QUAL_HTR','FIRST_PRODUCT_RUN_HGCV','FIRST_PRODUCT_RUN_THICK','PROCESS_INTERRUPTION_FLOW_B_POST'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// SERVICES
 | 
					// SERVICES
 | 
				
			||||||
@ -85,6 +87,7 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
 | 
				
			|||||||
				For each Val in IsComplete using @VM
 | 
									For each Val in IsComplete using @VM
 | 
				
			||||||
					Query := @VM : Val
 | 
										Query := @VM : Val
 | 
				
			||||||
				Next Val
 | 
									Next Val
 | 
				
			||||||
 | 
									Query := @FM
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
 | 
								Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
 | 
				
			||||||
			If Flag NE 0 then
 | 
								If Flag NE 0 then
 | 
				
			||||||
@ -106,6 +109,64 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
 | 
				
			|||||||
End Service
 | 
					End Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetOrderChecklistIds(NicaOrdersIds, NicaChecklistIds=NICA_CHECKLISTS, IsComplete=BOOLEAN, ChecklistOrderStates=ORDER_CHECKLIST_STATUSES)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
						OrderChecklistIds = ''
 | 
				
			||||||
 | 
						ErrorMsg          = ''
 | 
				
			||||||
 | 
						If ( (NicaOrdersIds NE '') or (IsComplete NE '') or (ChecklistOrderStates NE '') ) then 
 | 
				
			||||||
 | 
							Open 'DICT.NICA_ORDERS_CHECKLISTS' to hDict then
 | 
				
			||||||
 | 
								Query   = ''
 | 
				
			||||||
 | 
								Table   = 'NICA_ORDERS_CHECKLISTS'
 | 
				
			||||||
 | 
								Option  = 'E'
 | 
				
			||||||
 | 
								Flag    = ''
 | 
				
			||||||
 | 
								If (NicaOrdersIds NE '') then
 | 
				
			||||||
 | 
									Query := 'NICA_ORDERS_ID'
 | 
				
			||||||
 | 
									For each NicaOrderId in NicaOrdersIds using @VM
 | 
				
			||||||
 | 
										Query := @VM : NicaOrderId
 | 
				
			||||||
 | 
									Next NicaOrderId
 | 
				
			||||||
 | 
									Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (NicaChecklistIds NE '') then
 | 
				
			||||||
 | 
								    Query := 'NICA_CHECKLISTS_ID'
 | 
				
			||||||
 | 
								    For each NicaChecklistId in NicaChecklistIds using @VM
 | 
				
			||||||
 | 
								        Query := @VM : NicaChecklistId
 | 
				
			||||||
 | 
								    Next NicaChecklistId
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (IsComplete NE '') then
 | 
				
			||||||
 | 
									Query := 'IS_COMPLETE'
 | 
				
			||||||
 | 
									For each Val in IsComplete using @VM
 | 
				
			||||||
 | 
										Query := @VM : Val
 | 
				
			||||||
 | 
									Next Val
 | 
				
			||||||
 | 
									Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (ChecklistOrderStates NE '') then
 | 
				
			||||||
 | 
								    Query := 'STATE'
 | 
				
			||||||
 | 
								    For each ChecklistOrderState in ChecklistOrderStates using @VM
 | 
				
			||||||
 | 
								        Query := @VM : ChecklistOrderState
 | 
				
			||||||
 | 
								    Next ChecklistOrderState
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								Btree.Extract(Query, Table, hDict, OrderChecklistIds, Option, Flag)
 | 
				
			||||||
 | 
								If Flag NE 0 then
 | 
				
			||||||
 | 
									ErrorMsg = 'Error in ':Service:' service. Btree.Extract call failed.'
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end else
 | 
				
			||||||
 | 
								ErrorMsg = 'Error in ':Service:' service. Failed to open DICT.NICA_ORDERS_CHECKLISTS.'
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end else
 | 
				
			||||||
 | 
							ErrorMsg = 'Error in ':Service:' service. At least one search parameter must be provided.'
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						If ErrorMsg EQ '' then
 | 
				
			||||||
 | 
							Response = OrderChecklistIds
 | 
				
			||||||
 | 
						end else
 | 
				
			||||||
 | 
							Error_Services('Add', ErrorMsg)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetOrderUpdates()
 | 
					Service GetOrderUpdates()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hSysLists   = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
						hSysLists   = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
				
			||||||
@ -194,7 +255,9 @@ Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderTypes=ORDER_TYPE
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds)
 | 
					Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES, OrderFlows, OrderResponseLevel, ChecklistIds, Intrusive=BOOLEAN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    If Intrusive NE True$ then Intrusive = False$
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ErrorMsg     = ''
 | 
						ErrorMsg     = ''
 | 
				
			||||||
	EntityTypes  = 'REACTOR,REACTOR_LOG'
 | 
						EntityTypes  = 'REACTOR,REACTOR_LOG'
 | 
				
			||||||
@ -229,7 +292,39 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
 | 
				
			|||||||
			LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType
 | 
								LogData<3> = 'Attempting to create NICA order for entity ':EntityType:' ' :EntityID:' of type ':OrderType
 | 
				
			||||||
			Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)			
 | 
								Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)			
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
 | 
								Begin Case
 | 
				
			||||||
 | 
								    
 | 
				
			||||||
 | 
								    Case OrderType _EQC 'ABORT_ALARM'
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								        OrderTypes            = OrderType:@VM:'INTRUSIVE_MAINT'
 | 
				
			||||||
 | 
								        CurrActiveOrders      = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderTypes)
 | 
				
			||||||
 | 
								        If CurrActiveOrders NE '' then
 | 
				
			||||||
 | 
								            // If any active ABORT_ALARM orders are marked as intrusive (i.e., they were merged 
 | 
				
			||||||
 | 
								            // with an INTRUSIVE_MAINT order then mark the new order as intrusive).
 | 
				
			||||||
 | 
								            ActiveOrdersIntrusive = Sum(Xlate('NICA_ORDERS', CurrActiveOrders, 'INTRUSIVE', 'X'))
 | 
				
			||||||
 | 
								            If ActiveOrdersIntrusive then Intrusive = True$
 | 
				
			||||||
 | 
								        end
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								    Case OrderType _EQC 'INTRUSIVE_MAINT'
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								        Intrusive                  = True$
 | 
				
			||||||
			        CurrActiveOrders           = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
 | 
								        CurrActiveOrders           = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
 | 
				
			||||||
 | 
								        CurrActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, 'ABORT_ALARM')
 | 
				
			||||||
 | 
								        If CurrActiveAbortAlarmOrders NE '' then
 | 
				
			||||||
 | 
								            CurrActiveOrders<-1> = CurrActiveAbortAlarmOrders
 | 
				
			||||||
 | 
								            // Merge INTRUSIVE_MAINT and ABORT_ALARM orders into one ABORT_ALARM order.
 | 
				
			||||||
 | 
								            // Preserve ABORT_ALARM order flow ids for Reactor mode change logic that relies on these
 | 
				
			||||||
 | 
								            // to determine whether or not to trigger a new ABORT/ALARM order when changing ABORT/ALARM sub modes.
 | 
				
			||||||
 | 
								            OrderType            = 'ABORT_ALARM'
 | 
				
			||||||
 | 
								            OrderFlows           = Xlate('NICA_ORDERS', CurrActiveAbortAlarmOrders, 'ORDER_FLOW_IDS', 'X')
 | 
				
			||||||
 | 
								            OrderFlows           = SRP_Array('Clean', OrderFlows, 'TrimAndMakeUnique', @VM)
 | 
				
			||||||
 | 
								        end
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								    Case Otherwise$
 | 
				
			||||||
 | 
								        CurrActiveOrders = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType)
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								End Case
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			OrderTypeAlreadyActive = (CurrActiveOrders NE '')
 | 
								OrderTypeAlreadyActive = (CurrActiveOrders NE '')
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then
 | 
								If ( (OrderTypeAlreadyActive EQ False$) or (OrderType EQ 'INTRUSIVE_MAINT') or (OrderType EQ 'ABORT_ALARM') ) then
 | 
				
			||||||
@ -300,6 +395,17 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
 | 
				
			|||||||
							end
 | 
												end
 | 
				
			||||||
							
 | 
												
 | 
				
			||||||
							NewChecklistIds        = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM)
 | 
												NewChecklistIds        = SRP_Array('Clean', NewChecklistIds, 'TrimAndMakeUnique', @VM)
 | 
				
			||||||
 | 
												If Intrusive then
 | 
				
			||||||
 | 
												    // Remove checklist ids with REMOVE_IF_INRUSIVE flag set to True$
 | 
				
			||||||
 | 
												    ChecklistIdsToRemove = Nica_Orders_Services('GetChecklistIds', '', '', '', '', '', '', True$)
 | 
				
			||||||
 | 
												    If ChecklistIdsToRemove NE '' then
 | 
				
			||||||
 | 
												        For each ChecklistIdToRemove in ChecklistIdsToRemove using @VM
 | 
				
			||||||
 | 
												            Locate ChecklistIdToRemove in NewChecklistIds using @VM setting vPos then
 | 
				
			||||||
 | 
												                NewChecklistIds = Delete(NewChecklistIds, 0, vPos, 0)
 | 
				
			||||||
 | 
												            end
 | 
				
			||||||
 | 
												        Next ChecklistIdToRemove
 | 
				
			||||||
 | 
												    end
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
							NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X')
 | 
												NewChecklistPriorities = Xlate('NICA_CHECKLISTS', NewChecklistIds, 'PRIORITY', 'X')
 | 
				
			||||||
							ChecklistArray         = NewChecklistIds:@FM:NewChecklistPriorities
 | 
												ChecklistArray         = NewChecklistIds:@FM:NewChecklistPriorities
 | 
				
			||||||
							ChecklistArray         = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
 | 
												ChecklistArray         = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
 | 
				
			||||||
@ -369,6 +475,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
 | 
				
			|||||||
									end
 | 
														end
 | 
				
			||||||
									NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$>       = OrderFlows
 | 
														NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$>       = OrderFlows
 | 
				
			||||||
									NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
 | 
														NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
 | 
				
			||||||
 | 
														NicaOrderRec<NICA_ORDERS.INTRUSIVE$>            = Intrusive
 | 
				
			||||||
									LogNicaOrderRec                                 = NicaOrderRec
 | 
														LogNicaOrderRec                                 = NicaOrderRec
 | 
				
			||||||
									Swap @FM with ',' in LogNicaOrderRec
 | 
														Swap @FM with ',' in LogNicaOrderRec
 | 
				
			||||||
									LogData                                         = ''
 | 
														LogData                                         = ''
 | 
				
			||||||
@ -900,6 +1007,119 @@ Service GetAvailableFlowIds(NicaOrderType=ORDER_TYPES)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service AbortAlarmFromIntrusiveMaintRequired(ReactNo)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ErrorMsg                             = ''
 | 
				
			||||||
 | 
					    AbortAlarmFromIntrusiveMaintRequired = ''
 | 
				
			||||||
 | 
					    If ReactNo NE '' then
 | 
				
			||||||
 | 
					        If RowExists('REACTOR', ReactNo) then
 | 
				
			||||||
 | 
					            ActiveIntrusiveMaintOrderIds = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT')
 | 
				
			||||||
 | 
					            IntrusiveMaintOrderActive    = (ActiveIntrusiveMaintOrderIds NE '')
 | 
				
			||||||
 | 
					            If IntrusiveMaintOrderActive then
 | 
				
			||||||
 | 
					                // If any FIRST_PRODUCT_RUN_THICK or FIRST_PRODUCT_RUN_HGCV associated with active INTRUSIVE_MAINT
 | 
				
			||||||
 | 
					                // orders have been started or completed, then an ABORT/ALARM order should be triggerd.
 | 
				
			||||||
 | 
					                ChecklistIdsToSearch                 = 'FIRST_PRODUCT_RUN_THICK':@VM:'FIRST_PRODUCT_RUN_HGCV'
 | 
				
			||||||
 | 
					                InProcessOrCompleteOrderChecklistIds = Nica_Orders_Services('GetOrderChecklistIds', ActiveIntrusiveMaintOrderIds, ChecklistIdsToSearch, '', '#not-started')
 | 
				
			||||||
 | 
					                AbortAlarmFromIntrusiveMaintRequired = (InProcessOrCompleteOrderChecklistIds NE '')
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					                AbortAlarmFromIntrusiveMaintRequired = False$
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end else
 | 
				
			||||||
 | 
					            ErrorMsg = 'Error in ':Service:' service. REACTOR ':ReactNo:' does not exist.'
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					        ErrorMsg = 'Error in ':Service:' service. Null ReactNo passed into service.'
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If ErrorMsg EQ '' then
 | 
				
			||||||
 | 
					        Response = AbortAlarmFromIntrusiveMaintRequired
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					        Error_Services('Add', ErrorMsg)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service GetChecklistIds(Priorities, NicaBaseInstructionIds, NicaOrderFlowIds, NicaOrderFlowTypes, ReactorTypes, RemoveIfComplete=BOOLEAN, RemoveIfIntrusive=BOOLEAN)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
						ChecklistIds = ''
 | 
				
			||||||
 | 
						ErrorMsg     = ''
 | 
				
			||||||
 | 
						If ( (Priorities NE '') or (NicaBaseInstructionIds NE '') or (NicaOrderFlowIds NE '') or (NicaOrderFlowTypes NE '') |
 | 
				
			||||||
 | 
						    or (ReactorTypes NE '') or (RemoveIfComplete NE '') or (RemoveIfIntrusive NE '') ) then 
 | 
				
			||||||
 | 
							Open 'DICT.NICA_CHECKLISTS' to hDict then
 | 
				
			||||||
 | 
								Query   = ''
 | 
				
			||||||
 | 
								Table   = 'NICA_CHECKLISTS'
 | 
				
			||||||
 | 
								Option  = 'E'
 | 
				
			||||||
 | 
								Flag    = ''
 | 
				
			||||||
 | 
								If (Priorities NE '') then
 | 
				
			||||||
 | 
									Query := 'PRIORITY'
 | 
				
			||||||
 | 
									For each Priority in Priorities using @VM
 | 
				
			||||||
 | 
										Query := @VM : Priority
 | 
				
			||||||
 | 
									Next Priority
 | 
				
			||||||
 | 
									Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (NicaBaseInstructionIds NE '') then
 | 
				
			||||||
 | 
								    Query := 'NICA_BASE_INSTRUCTION_ID'
 | 
				
			||||||
 | 
								    For each NicaBaseInstructionId in NicaBaseInstructionIds using @VM
 | 
				
			||||||
 | 
								        Query := @VM : NicaBaseInstructionId
 | 
				
			||||||
 | 
								    Next NicaBaseInstructionId
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (NicaOrderFlowIds NE '') then
 | 
				
			||||||
 | 
									Query := 'NICA_ORDER_FLOW_IDS'
 | 
				
			||||||
 | 
									For each NicaOrderFlowId in NicaOrderFlowIds using @VM
 | 
				
			||||||
 | 
										Query := @VM : NicaOrderFlowId
 | 
				
			||||||
 | 
									Next NicaOrderFlowId
 | 
				
			||||||
 | 
									Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (NicaOrderFlowTypes NE '') then
 | 
				
			||||||
 | 
								    Query := 'NICA_ORDER_FLOW_TYPE'
 | 
				
			||||||
 | 
								    For each NicaOrderFlowType in NicaOrderFlowTypes using @VM
 | 
				
			||||||
 | 
								        Query := @VM : NicaOrderFlowType
 | 
				
			||||||
 | 
								    Next NicaOrderFlowTypes
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (ReactorTypes NE '') then
 | 
				
			||||||
 | 
								    Query := 'REACTOR_TYPES'
 | 
				
			||||||
 | 
								    For each NicaOrderFlowType in NicaOrderFlowTypes using @VM
 | 
				
			||||||
 | 
								        Query := @VM : NicaOrderFlowType
 | 
				
			||||||
 | 
								    Next NicaOrderFlowTypes
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (RemoveIfComplete NE '') then
 | 
				
			||||||
 | 
								    Query := 'REMOVE_IF_COMPLETE'
 | 
				
			||||||
 | 
								    For each Val in RemoveIfComplete using @VM
 | 
				
			||||||
 | 
								        Query := @VM : Val
 | 
				
			||||||
 | 
								    Next RemoveIfComplete
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								If (RemoveIfIntrusive NE '') then
 | 
				
			||||||
 | 
								    Query := 'REMOVE_IF_INTRUSIVE'
 | 
				
			||||||
 | 
								    For each Val in RemoveIfIntrusive using @VM
 | 
				
			||||||
 | 
								        Query := @VM : Val
 | 
				
			||||||
 | 
								    Next Val
 | 
				
			||||||
 | 
								    Query := @FM
 | 
				
			||||||
 | 
								end			
 | 
				
			||||||
 | 
								Btree.Extract(Query, Table, hDict, ChecklistIds, Option, Flag)
 | 
				
			||||||
 | 
								If Flag NE 0 then
 | 
				
			||||||
 | 
									ErrorMsg = 'Error in ':Service:' service. Btree.Extract call failed.'
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end else
 | 
				
			||||||
 | 
								ErrorMsg = 'Error in ':Service:' service. Failed to open DICT.NICA_CHECKLISTS.'
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end else
 | 
				
			||||||
 | 
							ErrorMsg = 'Error in ':Service:' service. At least one search parameter must be provided.'
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						If ErrorMsg EQ '' then
 | 
				
			||||||
 | 
							Response = ChecklistIds
 | 
				
			||||||
 | 
						end else
 | 
				
			||||||
 | 
							Error_Services('Add', ErrorMsg)
 | 
				
			||||||
 | 
						end    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Internal GoSubs
 | 
					// Internal GoSubs
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ COMPILE FUNCTION obj_Post_Log(Method,Parms)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services
 | 
					DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, obj_RDS, Database_Services, Environment_Services
 | 
				
			||||||
DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime
 | 
					DECLARE FUNCTION Logging_Services, Datetime, SRP_DateTime, GetTickCount
 | 
				
			||||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
 | 
					DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
 | 
				
			||||||
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services
 | 
					DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, ErrMsg, Logging_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -42,6 +42,13 @@ Headers     = 'Logging DTM' : @FM : 'WOMatKey' : @FM : ' SAPBatchNo' : @FM : 'Fa
 | 
				
			|||||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
					objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJPOSTLOG'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJPOSTLOG'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_Post_Log"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_Post_Log"'
 | 
				
			||||||
ErrorMsg = ''
 | 
					ErrorMsg = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -116,6 +123,9 @@ RETURN
 | 
				
			|||||||
Post:
 | 
					Post:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'Post'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    hSysLists       = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
					    hSysLists       = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
				
			||||||
    ServiceKeyID    = 'Obj_Post_Log*Post'
 | 
					    ServiceKeyID    = 'Obj_Post_Log*Post'
 | 
				
			||||||
    Lock hSysLists, ServiceKeyID then
 | 
					    Lock hSysLists, ServiceKeyID then
 | 
				
			||||||
@ -229,5 +239,9 @@ Post:
 | 
				
			|||||||
        Unlock hSysLists, ServiceKeyID else Null
 | 
					        Unlock hSysLists, ServiceKeyID else Null
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -18,8 +18,8 @@ COMPILE FUNCTION obj_Reactor(Method,Parms)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg
 | 
					DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Mona_Services
 | 
				
			||||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables
 | 
					DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Environment_Services, GetTickCount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$INSERT REACTOR_EQUATES
 | 
					$INSERT REACTOR_EQUATES
 | 
				
			||||||
@ -28,6 +28,14 @@ $INSERT REACT_STATE_EQUATES
 | 
				
			|||||||
$INSERT REACT_ITEM_EQUATES
 | 
					$INSERT REACT_ITEM_EQUATES
 | 
				
			||||||
$INSERT MSG_EQUATES
 | 
					$INSERT MSG_EQUATES
 | 
				
			||||||
$insert REACTOR_CHILD_KEY_IDS_EQUATES
 | 
					$insert REACTOR_CHILD_KEY_IDS_EQUATES
 | 
				
			||||||
 | 
					$Insert LOGICAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTOR'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTOR'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_Reactor"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_Reactor"'
 | 
				
			||||||
ErrorMsg = ''
 | 
					ErrorMsg = ''
 | 
				
			||||||
@ -66,6 +74,9 @@ RETURN Result
 | 
				
			|||||||
CurrItem:
 | 
					CurrItem:
 | 
				
			||||||
* * * * * * * 
 | 
					* * * * * * * 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					StartTick = GetTickCount()
 | 
				
			||||||
 | 
					MetricName = 'CurrItem'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ReactNo 	= Parms[1,@RM]
 | 
					ReactNo 	= Parms[1,@RM]
 | 
				
			||||||
ItemType	= Parms[COL2()+1,@RM]
 | 
					ItemType	= Parms[COL2()+1,@RM]
 | 
				
			||||||
ReactRec	= Parms[COL2()+1,@RM]
 | 
					ReactRec	= Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -96,6 +107,9 @@ LOCATE ItemType IN CurrInstTypes USING @VM SETTING Pos THEN
 | 
				
			|||||||
	Result = FIELD(CurrInstItems<1,Pos>,'*',2)
 | 
						Result = FIELD(CurrInstItems<1,Pos>,'*',2)
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EndTick = GetTickCount()
 | 
				
			||||||
 | 
					Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -103,6 +117,9 @@ RETURN
 | 
				
			|||||||
CurrGraphite:
 | 
					CurrGraphite:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					StartTick = GetTickCount()
 | 
				
			||||||
 | 
					MetricName = 'CurrGraphite'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ReactNo	= Parms[1,@RM]
 | 
					ReactNo	= Parms[1,@RM]
 | 
				
			||||||
ReactRec	= Parms[COL2()+1,@RM]
 | 
					ReactRec	= Parms[COL2()+1,@RM]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -135,6 +152,9 @@ FOR I = 1 TO ciCnt
 | 
				
			|||||||
	END
 | 
						END
 | 
				
			||||||
NEXT I
 | 
					NEXT I
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EndTick = GetTickCount()
 | 
				
			||||||
 | 
					Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,10 +15,10 @@ COMPILE FUNCTION obj_React_State(Method,Parms)
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services
 | 
					DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Database_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, Send_Dyn, Database_Services, Error_Services
 | 
					DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, Send_Dyn, Database_Services, Error_Services
 | 
				
			||||||
 | 
					Declare function Environment_Services, GetTickCount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$INSERT REACT_STATE_EQUATES
 | 
					$INSERT REACT_STATE_EQUATES
 | 
				
			||||||
$INSERT PROD_SPEC_EQUATES
 | 
					$INSERT PROD_SPEC_EQUATES
 | 
				
			||||||
@ -28,6 +28,12 @@ $INSERT LOGICAL
 | 
				
			|||||||
EQU CRLF$	TO \0D0A\
 | 
					EQU CRLF$	TO \0D0A\
 | 
				
			||||||
EQU TAB$	TO \09\
 | 
					EQU TAB$	TO \09\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTSTATE'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTSTATE'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_React_State"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_React_State"'
 | 
				
			||||||
ErrorMsg = ''
 | 
					ErrorMsg = ''
 | 
				
			||||||
@ -62,6 +68,9 @@ RETURN Result
 | 
				
			|||||||
ReactRunUnload:
 | 
					ReactRunUnload:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					StartTick = GetTickCount()
 | 
				
			||||||
 | 
					MetricName = 'ReactRunUnload'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Upadate all parameters set at Reactor Unload signature  *
 | 
					* Upadate all parameters set at Reactor Unload signature  *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ReactNo			= Parms[1,@RM]
 | 
					ReactNo			= Parms[1,@RM]
 | 
				
			||||||
@ -115,6 +124,9 @@ end
 | 
				
			|||||||
* otParms = FieldStore(otParms,@RM,4,0,RSRec)
 | 
					* otParms = FieldStore(otParms,@RM,4,0,RSRec)
 | 
				
			||||||
* obj_Tables('WriteRec',otParms)
 | 
					* obj_Tables('WriteRec',otParms)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EndTick = GetTickCount()
 | 
				
			||||||
 | 
					Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -20,9 +20,9 @@ COMPILE FUNCTION obj_React_Status(Method,Parms)
 | 
				
			|||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE FUNCTION   Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, Database_Services
 | 
					DECLARE FUNCTION   Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, Database_Services
 | 
				
			||||||
DECLARE FUNCTION   Error_Services, Environment_Services, Logging_Services, Override_Log_Services
 | 
					DECLARE FUNCTION   Error_Services, Environment_Services, Logging_Services, Override_Log_Services, GetTickCount
 | 
				
			||||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist
 | 
					DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Database_Services, Rlist
 | 
				
			||||||
DECLARE SUBROUTINE Logging_Services
 | 
					DECLARE SUBROUTINE Logging_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$INSERT LOGICAL
 | 
					$INSERT LOGICAL
 | 
				
			||||||
$INSERT MSG_EQUATES
 | 
					$INSERT MSG_EQUATES
 | 
				
			||||||
@ -43,6 +43,13 @@ LogFilename       = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] :
 | 
				
			|||||||
Headers           = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
 | 
					Headers           = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
 | 
				
			||||||
objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
					objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJREACTSTATUS'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJREACTSTATUS'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_React_Status"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_React_Status"'
 | 
				
			||||||
ErrorMsg = ''
 | 
					ErrorMsg = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -125,6 +132,9 @@ RETURN
 | 
				
			|||||||
CassLoad:
 | 
					CassLoad:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CassLoad'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    ReactNo = Parms[1,@RM]
 | 
					    ReactNo = Parms[1,@RM]
 | 
				
			||||||
    WONo    = Parms[COL2()+1,@RM]
 | 
					    WONo    = Parms[COL2()+1,@RM]
 | 
				
			||||||
    CassNo  = Parms[COL2()+1,@RM]
 | 
					    CassNo  = Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -203,12 +213,17 @@ CassLoad:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Result = IdleTime
 | 
					    Result = IdleTime
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
CassUnload:
 | 
					CassUnload:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CassUnload'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
    ReactNo   = Parms[1,@RM]
 | 
					    ReactNo   = Parms[1,@RM]
 | 
				
			||||||
    WONo      = Parms[COL2()+1,@RM]
 | 
					    WONo      = Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -271,12 +286,17 @@ CassUnload:
 | 
				
			|||||||
        ErrorMsg = Error_Services('GetMessage')
 | 
					        ErrorMsg = Error_Services('GetMessage')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
ReactorLoad:
 | 
					ReactorLoad:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'ReactorLoad'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
    * EpiPro Reactor Load
 | 
					    * EpiPro Reactor Load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -362,11 +382,16 @@ ReactorLoad:
 | 
				
			|||||||
        ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').'
 | 
					        ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').'
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
ReactorUnload:
 | 
					ReactorUnload:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'ReactorUnload'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
* EpiPro Reactor Unload
 | 
					* EpiPro Reactor Unload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -432,6 +457,9 @@ ReactorUnload:
 | 
				
			|||||||
        ErrorMsg = Error_Services('GetMessage')
 | 
					        ErrorMsg = Error_Services('GetMessage')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,11 +28,12 @@ Compile Function obj_WO_Mat(Method,Parms)
 | 
				
			|||||||
Declare Function   Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack
 | 
					Declare Function   Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, Get_Property, obj_RDS, RetStack
 | 
				
			||||||
Declare Function   Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services
 | 
					Declare Function   Database_Services, GaN_Services, Logging_Services, Environment_Services, Signature_Services
 | 
				
			||||||
Declare Function   obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup
 | 
					Declare Function   obj_WO_Mat, obj_WM_In, obj_WM_Out, obj_Prod_Spec, obj_Clean_Insp, obj_Calendar, obj_Popup
 | 
				
			||||||
Declare Function   Error_Services, Memberof, Datetime
 | 
					Declare Function   Error_Services, Memberof, Datetime, GetTickCount
 | 
				
			||||||
Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event
 | 
					Declare Subroutine Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event
 | 
				
			||||||
Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services
 | 
					Declare Subroutine obj_RDS, Extract_SI_Keys, obj_Pend_Ship_Labels, obj_WO_Mat_QA, Work_Order_Services, Service_Services
 | 
				
			||||||
Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr
 | 
					Declare Subroutine obj_notes, obj_Clean_Insp, obj_Post_Log, Send_Info, obj_WO_Mat_Log, obj_SAP, obj_WO_Mat, obj_WO_Wfr
 | 
				
			||||||
Declare Subroutine Logging_Services, Set_Property, Delete, Database_Services, SRP_Stopwatch, Material_Services
 | 
					Declare Subroutine Logging_Services, Set_Property, Delete, Database_Services, SRP_Stopwatch, Material_Services
 | 
				
			||||||
 | 
					Declare subroutine Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$Insert MSG_EQUATES
 | 
					$Insert MSG_EQUATES
 | 
				
			||||||
$Insert WO_MAT_EQUATES
 | 
					$Insert WO_MAT_EQUATES
 | 
				
			||||||
@ -120,6 +121,13 @@ SAPFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' SetS
 | 
				
			|||||||
SAPHeaders  = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo'
 | 
					SAPHeaders  = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo'
 | 
				
			||||||
objSAPLog   = Logging_Services('NewLog', SAPLogPath, SAPFileName, CRLF$, Comma$, SAPHeaders, '', False$, False$)
 | 
					objSAPLog   = Logging_Services('NewLog', SAPLogPath, SAPFileName, CRLF$, Comma$, SAPHeaders, '', False$, False$)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOMAT'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOMAT'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IF NOT(ASSIGNED(Method))	THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
 | 
					IF NOT(ASSIGNED(Method))	THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
 | 
				
			||||||
IF NOT(ASSIGNED(Parms))		THEN Parms = ''
 | 
					IF NOT(ASSIGNED(Parms))		THEN Parms = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -634,6 +642,9 @@ RETURN
 | 
				
			|||||||
CurrStatus:
 | 
					CurrStatus:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CurrStatus'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[1,@RM]
 | 
						IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[1,@RM]
 | 
				
			||||||
	IF NOT(ASSIGNED(WOMatRec)) THEN WOMatRec = Parms[COL2()+1,@RM]
 | 
						IF NOT(ASSIGNED(WOMatRec)) THEN WOMatRec = Parms[COL2()+1,@RM]
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -894,6 +905,9 @@ CurrStatus:
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	IF Result = 'RTS' AND WOMatRec<WO_MAT_SHIP_HOLD$> = 1	THEN Result = 'SHOLD'
 | 
						IF Result = 'RTS' AND WOMatRec<WO_MAT_SHIP_HOLD$> = 1	THEN Result = 'SHOLD'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5566,3 +5580,4 @@ ExpCOA:
 | 
				
			|||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,9 +17,9 @@ COMPILE FUNCTION obj_WO_Mat_Log(Method,Parms)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, NextKey, Popup, Get_Property, obj_RDS, Database_Services
 | 
					DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, NextKey, Popup, Get_Property, obj_RDS, Database_Services
 | 
				
			||||||
Declare function    Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime
 | 
					Declare function    Logging_Services, Environment_Services, RTI_CreateGUID, Error_Services, Datetime, GetTickCount
 | 
				
			||||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
 | 
					DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList, obj_WO_Log, Send_Event, obj_RDS
 | 
				
			||||||
DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, Logging_Services, Database_Services, Lot_Event_Services
 | 
					DECLARE SUBROUTINE obj_WO_Mat, Send_Info, obj_Notes, Logging_Services, Database_Services, Lot_Event_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$INSERT MSG_EQUATES
 | 
					$INSERT MSG_EQUATES
 | 
				
			||||||
$INSERT WO_MAT_LOG_EQUATES
 | 
					$INSERT WO_MAT_LOG_EQUATES
 | 
				
			||||||
@ -49,6 +49,13 @@ Headers     = 'Logging DTM'
 | 
				
			|||||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
					objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOMATLOG'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOMATLOG'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_WO_Mat_Log"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_WO_Mat_Log"'
 | 
				
			||||||
ErrorMsg = ''
 | 
					ErrorMsg = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,6 +84,8 @@ RETURN Result
 | 
				
			|||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
Create:
 | 
					Create:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'Create'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
    LogFile		= Parms[1,@RM]
 | 
					    LogFile		= Parms[1,@RM]
 | 
				
			||||||
    TransDTM	= Parms[COL2()+1,@RM]
 | 
					    TransDTM	= Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -233,6 +242,8 @@ Create:
 | 
				
			|||||||
    	ErrorMsg = Error_Services('GetMessage')
 | 
					    	ErrorMsg = Error_Services('GetMessage')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -364,3 +375,4 @@ Post:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,9 @@ COMPILE FUNCTION obj_WO_React(Method,Parms)
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA
 | 
					DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount
 | 
				
			||||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA
 | 
					Declare function Environment_Services
 | 
				
			||||||
 | 
					DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$INSERT MSG_EQUATES
 | 
					$INSERT MSG_EQUATES
 | 
				
			||||||
$INSERT WO_REACT_EQUATES
 | 
					$INSERT WO_REACT_EQUATES
 | 
				
			||||||
@ -24,6 +25,7 @@ $INSERT PRS_STAGE_EQUATES
 | 
				
			|||||||
$INSERT WO_MAT_EQUATES
 | 
					$INSERT WO_MAT_EQUATES
 | 
				
			||||||
$INSERT RDS_EQUATES
 | 
					$INSERT RDS_EQUATES
 | 
				
			||||||
$INSERT QA_MET_EQUATES			;* Used in GetQAMet data structure return variable
 | 
					$INSERT QA_MET_EQUATES			;* Used in GetQAMet data structure return variable
 | 
				
			||||||
 | 
					$Insert LOGICAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
 | 
					ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
 | 
				
			||||||
@ -40,6 +42,13 @@ END
 | 
				
			|||||||
Result = ''
 | 
					Result = ''
 | 
				
			||||||
Log = ''
 | 
					Log = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_OBJWOREACT'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_OBJWOREACT'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BEGIN CASE
 | 
					BEGIN CASE
 | 
				
			||||||
	CASE Method = 'AddRdsNo'	; GOSUB AddRdsNo
 | 
						CASE Method = 'AddRdsNo'	; GOSUB AddRdsNo
 | 
				
			||||||
	CASE Method = 'RemRdsNo'	; GOSUB RemRdsNo
 | 
						CASE Method = 'RemRdsNo'	; GOSUB RemRdsNo
 | 
				
			||||||
@ -61,6 +70,9 @@ RETURN Result
 | 
				
			|||||||
AddRdsNo:
 | 
					AddRdsNo:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					StartTick = GetTickCount()
 | 
				
			||||||
 | 
					MetricName = 'AddRdsNo'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WONo	= Parms[1,@RM]
 | 
					WONo	= Parms[1,@RM]
 | 
				
			||||||
StepNo	= Parms[COL2()+1,@RM]
 | 
					StepNo	= Parms[COL2()+1,@RM]
 | 
				
			||||||
ReactNo	= Parms[COL2()+1,@RM]
 | 
					ReactNo	= Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -135,6 +147,9 @@ obj_Tables('WriteOnlyRec',otParms)												;* Done with updates to the WO_REA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Result = Log
 | 
					Result = Log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EndTick = GetTickCount()
 | 
				
			||||||
 | 
					Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -143,6 +158,9 @@ RETURN
 | 
				
			|||||||
RemRDSNo:
 | 
					RemRDSNo:
 | 
				
			||||||
* * * * * * *
 | 
					* * * * * * *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					StartTick = GetTickCount()
 | 
				
			||||||
 | 
					MetricName = 'RemRDSNo'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WONo	= Parms[1,@RM]
 | 
					WONo	= Parms[1,@RM]
 | 
				
			||||||
StepNo	= Parms[COL2()+1,@RM]
 | 
					StepNo	= Parms[COL2()+1,@RM]
 | 
				
			||||||
ReactNo	= Parms[COL2()+1,@RM]
 | 
					ReactNo	= Parms[COL2()+1,@RM]
 | 
				
			||||||
@ -218,6 +236,9 @@ obj_Tables('WriteOnlyRec',otParms)												;* Done with updates to the WO_REA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Result = Log
 | 
					Result = Log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EndTick = GetTickCount()
 | 
				
			||||||
 | 
					Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RETURN
 | 
					RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,8 @@
 | 
				
			|||||||
Compile function Override_Log_Services(@Service, @Params)
 | 
					Compile function Override_Log_Services(@Service, @Params)
 | 
				
			||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$insert LOGICAL
 | 
					$Insert SERVICE_SETUP
 | 
				
			||||||
 | 
					$insert APP_INSERTS
 | 
				
			||||||
$Insert OVERRIDE_LOG_EQUATES
 | 
					$Insert OVERRIDE_LOG_EQUATES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function   Datetime, NextKey, Error_Services, SRP_Datetime
 | 
					Declare function   Datetime, NextKey, Error_Services, SRP_Datetime
 | 
				
			||||||
@ -22,9 +23,10 @@ Options OVERRIDE_TYPES     = 'ROTR_BLOCK,UNSIGN,CLEAN_INSP,REACTOR_PROVE_IN,REAC
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_TYPES, OverrideCause='')
 | 
					Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_TYPES, OverrideCause='')
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						ErrorMsg = ''
 | 
				
			||||||
	RecKey   = ''
 | 
						RecKey   = ''
 | 
				
			||||||
    for each TableName in Table using @VM setting TablePos
 | 
					    for each TableName in Table using @VM setting TablePos
 | 
				
			||||||
    	RecKey<1,-1> = Nextkey('OVERRIDE_LOG')
 | 
					    	RecKey                        = Nextkey('OVERRIDE_LOG')
 | 
				
			||||||
		orRec                         = ''
 | 
							orRec                         = ''
 | 
				
			||||||
		orRec<OVERRIDE_LOG_TABLE$>    = Table<1, TablePos>
 | 
							orRec<OVERRIDE_LOG_TABLE$>    = Table<1, TablePos>
 | 
				
			||||||
		orRec<OVERRIDE_LOG_KEY$>      = Key<1, TablePos>
 | 
							orRec<OVERRIDE_LOG_KEY$>      = Key<1, TablePos>
 | 
				
			||||||
@ -45,6 +47,7 @@ Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
End Service
 | 
					End Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo)
 | 
					Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	If DateTimeFrom EQ '' OR Not(Num(DateTimeFrom)) Or DateTimeFrom GT DateTimeTo then
 | 
						If DateTimeFrom EQ '' OR Not(Num(DateTimeFrom)) Or DateTimeFrom GT DateTimeTo then
 | 
				
			||||||
@ -77,7 +80,6 @@ Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo
 | 
				
			|||||||
		Error_Services('Add', 'Error in ' : service : ' unable to open OVERRIDE_LOG dictionary.')
 | 
							Error_Services('Add', 'Error in ' : service : ' unable to open OVERRIDE_LOG dictionary.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	Response = keylist
 | 
						Response = keylist
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -143,7 +143,7 @@ Declare subroutine  RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_
 | 
				
			|||||||
Declare subroutine  Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS
 | 
					Declare subroutine  Set_Status, Sleepery, Winyield, Yield, SRP_COM, QA_Services, Logging_Services, Obj_RDS
 | 
				
			||||||
Declare subroutine  Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log
 | 
					Declare subroutine  Validate, obj_WO_Mat, obj_WO_Mat_Log, obj_React_Status, Record_Lock, obj_React_State, obj_Post_Log
 | 
				
			||||||
Declare subroutine  RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
 | 
					Declare subroutine  RDS_Services, obj_WO_React, RDS_React_Run, Signature_Services, SQL_Services, SRP_Stopwatch
 | 
				
			||||||
Declare subroutine  Override_Services, Reactor_Services, Lot_Services
 | 
					Declare subroutine  Override_Services, Reactor_Services, Lot_Services, Mona_Services
 | 
				
			||||||
Declare function    SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
 | 
					Declare function    SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
 | 
				
			||||||
Declare function    Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
 | 
					Declare function    Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
 | 
				
			||||||
Declare function    Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services
 | 
					Declare function    Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClient_Services, Obj_RDS, SQL_Services
 | 
				
			||||||
@ -177,6 +177,13 @@ LogFilename       = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] :
 | 
				
			|||||||
Headers           = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
 | 
					Headers           = 'Logging DTM' : @FM : 'User' : @FM : 'CassNo' : @FM : 'RDSNo' : @FM : 'Load DTM' : @FM : 'Service' : @FM : 'Notes'
 | 
				
			||||||
objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
					objReactStatusLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_QASERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_QASERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
						Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -229,12 +236,6 @@ Service CalculateHgCVData(Datapoints)
 | 
				
			|||||||
            Min    = Min(Min, DataPoint)
 | 
					            Min    = Min(Min, DataPoint)
 | 
				
			||||||
            Max    = Max(Max, DataPoint)
 | 
					            Max    = Max(Max, DataPoint)
 | 
				
			||||||
            // Edge Mean Delta
 | 
					            // Edge Mean Delta
 | 
				
			||||||
*            If Index GE 6 AND Index LE 9 then
 | 
					 | 
				
			||||||
*                Delta1 = Delta1 + DataPoint
 | 
					 | 
				
			||||||
*            end
 | 
					 | 
				
			||||||
*            If Index GE 2 AND Index LE 5 then
 | 
					 | 
				
			||||||
*                Delta2 = Delta2 + DataPoint
 | 
					 | 
				
			||||||
*            end
 | 
					 | 
				
			||||||
        end        
 | 
					        end        
 | 
				
			||||||
        // Range %
 | 
					        // Range %
 | 
				
			||||||
        Locate Index in RangePoints using ',' setting unusedIndex then
 | 
					        Locate Index in RangePoints using ',' setting unusedIndex then
 | 
				
			||||||
@ -256,25 +257,15 @@ Service CalculateHgCVData(Datapoints)
 | 
				
			|||||||
    EdgeMean4mm   = Edge4mmSum / 4
 | 
					    EdgeMean4mm   = Edge4mmSum / 4
 | 
				
			||||||
    EdgeMean10mm  = Edge10mmSum / 4
 | 
					    EdgeMean10mm  = Edge10mmSum / 4
 | 
				
			||||||
    If EdgeMean10mm GT 0 then
 | 
					    If EdgeMean10mm GT 0 then
 | 
				
			||||||
*        Delta1Avg     = Delta1/4
 | 
					 | 
				
			||||||
*        Delta2Avg     = Delta2/4
 | 
					 | 
				
			||||||
        EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum)  / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
 | 
					        EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum)  / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        // Range %
 | 
					        // Range %
 | 
				
			||||||
        Range           = RangeMax - RangeMin
 | 
					        Range           = RangeMax - RangeMin
 | 
				
			||||||
        NumRangePoints  = DCount(RangePoints, ',')
 | 
					        NumRangePoints  = DCount(RangePoints, ',')
 | 
				
			||||||
        RangeAvg        = RangeAvg / NumRangePoints
 | 
					        RangeAvg        = RangeAvg / NumRangePoints
 | 
				
			||||||
        RangePct        = (Range / RangeAvg) * 100
 | 
					        RangePct        = (Range / RangeAvg) * 100
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
*        EdgeMeanDelta   = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
 | 
					 | 
				
			||||||
*        RangePct        = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    // Average
 | 
					 | 
				
			||||||
    Average         = Sum / NumDataPoints
 | 
					 | 
				
			||||||
*    Average         = OConv(IConv(Average, 'MD3L'), 'MD3L')
 | 
					 | 
				
			||||||
*    Min             = OConv(IConv(Min, 'MD3L'), 'MD3L')
 | 
					 | 
				
			||||||
*    Max             = OConv(IConv(Max, 'MD3L'), 'MD3L')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Average         = Sum / NumDataPoints   
 | 
				
			||||||
    FullAvg         = ''
 | 
					    FullAvg         = ''
 | 
				
			||||||
    TotalDataPoints = DCount(DataPoints, @VM)
 | 
					    TotalDataPoints = DCount(DataPoints, @VM)
 | 
				
			||||||
    If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
 | 
					    If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
 | 
				
			||||||
@ -361,10 +352,6 @@ Service PostROTRRequest(RDSNo)
 | 
				
			|||||||
            If Flag EQ 0 then
 | 
					            If Flag EQ 0 then
 | 
				
			||||||
                If RequestKeyID EQ '' then
 | 
					                If RequestKeyID EQ '' then
 | 
				
			||||||
                    WOMatKey     = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
					                    WOMatKey     = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
				
			||||||
                    FinalSigComp = False$
 | 
					 | 
				
			||||||
*                    FinalSigComp = Signature_Services('FinalSigComp', WOMatKey)
 | 
					 | 
				
			||||||
                    If FinalSigComp NE True$ then 
 | 
					 | 
				
			||||||
                        // This is a new request
 | 
					 | 
				
			||||||
					RequestDate  = Date()
 | 
										RequestDate  = Date()
 | 
				
			||||||
					RequestTime  = Time()
 | 
										RequestTime  = Time()
 | 
				
			||||||
					RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
 | 
										RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
 | 
				
			||||||
@ -377,9 +364,6 @@ Service PostROTRRequest(RDSNo)
 | 
				
			|||||||
					end else
 | 
										end else
 | 
				
			||||||
						ErrorMessage = Error_Services('GetMessage')                       
 | 
											ErrorMessage = Error_Services('GetMessage')                       
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
                    end else
 | 
					 | 
				
			||||||
                        ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'        
 | 
					 | 
				
			||||||
                    end
 | 
					 | 
				
			||||||
                end else
 | 
					                end else
 | 
				
			||||||
                    ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
 | 
					                    ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
 | 
				
			||||||
                end
 | 
					                end
 | 
				
			||||||
@ -510,13 +494,6 @@ Service ProcessROTRRequest(RDSNo)
 | 
				
			|||||||
                        Swap @FM with ',' in ResponseCopy
 | 
					                        Swap @FM with ',' in ResponseCopy
 | 
				
			||||||
                        LogData<3>                                             = 'ROTR Status response: ':Response
 | 
					                        LogData<3>                                             = 'ROTR Status response: ':Response
 | 
				
			||||||
                        Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)                                
 | 
					                        Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)                                
 | 
				
			||||||
*                        ROTRRec                                                = ''
 | 
					 | 
				
			||||||
*                        ROTRRec<ROTR.REACTOR_STATUS$>                          = Response<1>
 | 
					 | 
				
			||||||
*                        ROTRRec<ROTR.REACTOR_STATUS_REASON$>                   = Response<2>
 | 
					 | 
				
			||||||
*                        ROTRRec<ROTR.REACTOR_NCR_COUNT$>                       = Response<3>
 | 
					 | 
				
			||||||
*                        ROTRRec<ROTR.REACTOR_ZERO_NCR_RUN_COUNT$>              = Response<4>
 | 
					 | 
				
			||||||
*                        ROTRRec<ROTR.REACTOR_UCL_EXCEEDED_RUN_COUNT$>          = Response<5>
 | 
					 | 
				
			||||||
*                        Database_Services('WriteDataRow', 'ROTR', LWICINo, ROTRRec, True$, False$, True$)                                 
 | 
					 | 
				
			||||||
                        CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$>                 = Response<1>
 | 
					                        CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$>                 = Response<1>
 | 
				
			||||||
                        CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$>          = Response<2>
 | 
					                        CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$>          = Response<2>
 | 
				
			||||||
                        CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$>              = Response<3>
 | 
					                        CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$>              = Response<3>
 | 
				
			||||||
@ -524,7 +501,6 @@ Service ProcessROTRRequest(RDSNo)
 | 
				
			|||||||
                        CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
 | 
					                        CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
 | 
				
			||||||
                        // Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
 | 
					                        // Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
 | 
				
			||||||
                        // That routine will recalculate the final ROTR status. 
 | 
					                        // That routine will recalculate the final ROTR status. 
 | 
				
			||||||
*                        CIRec<CLEAN_INSP_ROTR_UPDATE_FLAG$>                    = True$
 | 
					 | 
				
			||||||
                        Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$)        			
 | 
					                        Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$)        			
 | 
				
			||||||
                    end else
 | 
					                    end else
 | 
				
			||||||
                        ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
 | 
					                        ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
 | 
				
			||||||
@ -569,6 +545,7 @@ end service
 | 
				
			|||||||
// 
 | 
					// 
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service GetROTRStatus(RDSKey)
 | 
					Service GetROTRStatus(RDSKey)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    RDSRec               = Database_Services('ReadDataRow', 'RDS', RDSKey)
 | 
					    RDSRec               = Database_Services('ReadDataRow', 'RDS', RDSKey)
 | 
				
			||||||
    WONo                 = RDSRec<RDS_WO$>
 | 
					    WONo                 = RDSRec<RDS_WO$>
 | 
				
			||||||
    RDSCassNo            = RDSRec<RDS_CASS_NO$>
 | 
					    RDSCassNo            = RDSRec<RDS_CASS_NO$>
 | 
				
			||||||
@ -1218,12 +1195,7 @@ Service ProcessWaferImageRequests()
 | 
				
			|||||||
                        Reactor      = Xlate('RDS', RDSNo, 'REACTOR', 'X')
 | 
					                        Reactor      = Xlate('RDS', RDSNo, 'REACTOR', 'X')
 | 
				
			||||||
                        PSN          = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
 | 
					                        PSN          = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
 | 
				
			||||||
                        // Format Wafer Number for SQL Query
 | 
					                        // Format Wafer Number for SQL Query
 | 
				
			||||||
                        WaferNo      = TrimF(WaferNo)
 | 
					                        WaferNo = Fmt(TrimF(WaferNo), 'R(0)#2')
 | 
				
			||||||
                        If WaferNo < 10 then
 | 
					 | 
				
			||||||
                            WaferNo  = '*0' : WaferNo
 | 
					 | 
				
			||||||
                        end else
 | 
					 | 
				
			||||||
                            WaferNo  = '*' : WaferNo
 | 
					 | 
				
			||||||
                        end
 | 
					 | 
				
			||||||
                        Query = "DECLARE @RDS         varchar(10) "                                                     |
 | 
					                        Query = "DECLARE @RDS         varchar(10) "                                                     |
 | 
				
			||||||
                              : "DECLARE @RECIPE      varchar(30) "                                                     |
 | 
					                              : "DECLARE @RECIPE      varchar(30) "                                                     |
 | 
				
			||||||
                              : "DECLARE @WFRID       varchar(10) "                                                     |
 | 
					                              : "DECLARE @WFRID       varchar(10) "                                                     |
 | 
				
			||||||
@ -1245,7 +1217,7 @@ Service ProcessWaferImageRequests()
 | 
				
			|||||||
                        InsertDate   = InsertDTM[1, 'F ']
 | 
					                        InsertDate   = InsertDTM[1, 'F ']
 | 
				
			||||||
                        Year         = Field(InsertDate, '/', 3, 1) 
 | 
					                        Year         = Field(InsertDate, '/', 3, 1) 
 | 
				
			||||||
                        WorkWeek     = 'WW':Date_Services('GetWeekNum', InsertDate)
 | 
					                        WorkWeek     = 'WW':Date_Services('GetWeekNum', InsertDate)
 | 
				
			||||||
                        PDFPath      = WaferMapRoot:'_\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
 | 
					                        PDFPath      = WaferMapRoot:'\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
 | 
				
			||||||
                        Set_Status(0)
 | 
					                        Set_Status(0)
 | 
				
			||||||
                        PDFFile      = ''
 | 
					                        PDFFile      = ''
 | 
				
			||||||
                        OSRead PDFFile from PDFPath then
 | 
					                        OSRead PDFFile from PDFPath then
 | 
				
			||||||
@ -1292,100 +1264,6 @@ Service ProcessWaferImageRequests()
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
// ProcessWaferImageRequests
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Service that attempts to process all wafer map image requests. These requests are queued in the
 | 
					 | 
				
			||||||
// WAFER_IMAGE_REQUESTS table.
 | 
					 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
Service ProcessWaferImageRequestsOld()
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    hSysLists   = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
					 | 
				
			||||||
    Lock hSysLists, ServiceKeyID then
 | 
					 | 
				
			||||||
        hWaferImageRequests = Database_Services('GetTableHandle', 'WAFER_IMAGE_REQUESTS')
 | 
					 | 
				
			||||||
        If Error_Services('NoError') then
 | 
					 | 
				
			||||||
            Sentence    = 'SELECT WAFER_IMAGE_REQUESTS WITH RESPONSE_DATE EQ "" BY REQUEST_DATE BY REQUEST_TIME'
 | 
					 | 
				
			||||||
            Set_Status(0)
 | 
					 | 
				
			||||||
            RList(Sentence, TARGET_ACTIVELIST$, '', '', '')
 | 
					 | 
				
			||||||
            EOF         = False$
 | 
					 | 
				
			||||||
            Loop
 | 
					 | 
				
			||||||
                ReadNext RequestKeyID else EOF = True$
 | 
					 | 
				
			||||||
            Until EOF
 | 
					 | 
				
			||||||
                RequestDate  = Field(RequestKeyID, '*', 1)
 | 
					 | 
				
			||||||
                RequestTime  = Field(RequestKeyID, '*', 2)
 | 
					 | 
				
			||||||
                RequestTime  = RequestTime / 86400
 | 
					 | 
				
			||||||
                RequestTime  = RequestTime[3, 5]
 | 
					 | 
				
			||||||
                RequestDTM   = RequestDate:'.':RequestTime
 | 
					 | 
				
			||||||
                CurrDTM      = Datetime()               
 | 
					 | 
				
			||||||
                TimeInQueue = CurrDTM - RequestDTM
 | 
					 | 
				
			||||||
                If TimeInQueue LT 1 then
 | 
					 | 
				
			||||||
                    Lock hWaferImageRequests, RequestKeyID then
 | 
					 | 
				
			||||||
                        EncodedPDF   = ''
 | 
					 | 
				
			||||||
                        ResponseBody = ''
 | 
					 | 
				
			||||||
                        RequestRow   = Database_Services('ReadDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID)
 | 
					 | 
				
			||||||
                        RDSNo        = RequestRow<WAFER_IMAGE_REQUESTS.RDS_NO$>
 | 
					 | 
				
			||||||
                        WaferNo      = RequestRow<WAFER_IMAGE_REQUESTS.WAFER_NO$>
 | 
					 | 
				
			||||||
                        TencorRecipe = RequestRow<WAFER_IMAGE_REQUESTS.TENCOR_RECIPE$>
 | 
					 | 
				
			||||||
                        ReturnPDF    = RequestRow<WAFER_IMAGE_REQUESTS.RETURN_PDF$>
 | 
					 | 
				
			||||||
                        Reactor      = Xlate('RDS', RDSNo, 'REACTOR', 'X')
 | 
					 | 
				
			||||||
                        PSN          = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
 | 
					 | 
				
			||||||
                        // Format Wafer Number for SQL Query
 | 
					 | 
				
			||||||
                        WaferNo      = TrimF(WaferNo)
 | 
					 | 
				
			||||||
                        If WaferNo < 10 then
 | 
					 | 
				
			||||||
                            WaferNo  = '*0' : WaferNo
 | 
					 | 
				
			||||||
                        end else
 | 
					 | 
				
			||||||
                            WaferNo  = '*' : WaferNo
 | 
					 | 
				
			||||||
                        end
 | 
					 | 
				
			||||||
                        Query = "DECLARE @RDS         varchar(10) "                                                     |
 | 
					 | 
				
			||||||
                              : "DECLARE @RECIPE      varchar(30) "                                                     |
 | 
					 | 
				
			||||||
                              : "DECLARE @WFRID       varchar(10) "                                                     |
 | 
					 | 
				
			||||||
                              : "SET @RDS      = '":RDSNo:"' "                                                          |
 | 
					 | 
				
			||||||
                              : "SET @RECIPE   = '":TencorRecipe:"' "                                                   |
 | 
					 | 
				
			||||||
                              : "SET @WFRID    = '":WaferNo:"' "                                                        |
 | 
					 | 
				
			||||||
                              : "SELECT child.AttachmentID "                                                            |
 | 
					 | 
				
			||||||
                              : "FROM Metrology.dbo.TencorRunHeader header "                                            |
 | 
					 | 
				
			||||||
                              : "INNER JOIN Metrology.dbo.TencorRunData child on header.id = child.headerid "           |
 | 
					 | 
				
			||||||
                              : "WHERE header.rds = @RDS and header.recipe like @RECIPE + '%' and child.slot = @WFRID " |
 | 
					 | 
				
			||||||
                              : "ORDER BY header.insertDate DESC, child.slot ASC"
 | 
					 | 
				
			||||||
                              
 | 
					 | 
				
			||||||
                        WaferMapDB      = Environment_Services('GetMetrologyProductionPath')     
 | 
					 | 
				
			||||||
                        AttachmentID    = SQL_Services('GetDataRows', 'SPC', Query)
 | 
					 | 
				
			||||||
                        AttachmentID    = SRP_Trim(AttachmentID, 'FB', '{}')
 | 
					 | 
				
			||||||
                        WaferMapRoot    = Environment_Services('GetWaferMapProductionPath')
 | 
					 | 
				
			||||||
                        PDFPath         = WaferMapRoot:'\':AttachmentID:'\image.pdf'
 | 
					 | 
				
			||||||
                        Set_Status(0)
 | 
					 | 
				
			||||||
                        PDFFile         = ''
 | 
					 | 
				
			||||||
                        OSRead PDFFile from PDFPath then
 | 
					 | 
				
			||||||
                            // "Cache" PDF on app server
 | 
					 | 
				
			||||||
                            QA_Services('PostToWaferImageQueue', RDSNo, WaferNo, TencorRecipe, PDFFile)
 | 
					 | 
				
			||||||
                            If ReturnPDF EQ True$ then
 | 
					 | 
				
			||||||
                                ResponseBody                                    = SRP_Encode(PDFFile)
 | 
					 | 
				
			||||||
                                RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_BODY$> = ResponseBody
 | 
					 | 
				
			||||||
                                RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_DATE$> = Date()
 | 
					 | 
				
			||||||
                                RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_TIME$> = Time()
 | 
					 | 
				
			||||||
                                Database_Services('WriteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, RequestRow, True$)    
 | 
					 | 
				
			||||||
                            end else
 | 
					 | 
				
			||||||
                                Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
 | 
					 | 
				
			||||||
                            end
 | 
					 | 
				
			||||||
                            
 | 
					 | 
				
			||||||
                        end else                    
 | 
					 | 
				
			||||||
                            ErrorCode = Status()
 | 
					 | 
				
			||||||
                            Error_Services('Add', 'Error retrieving wafer map image for AttachmentID ':AttachmentID)
 | 
					 | 
				
			||||||
                        end
 | 
					 | 
				
			||||||
                        Unlock hWaferImageRequests, RequestKeyID else Null
 | 
					 | 
				
			||||||
                    end
 | 
					 | 
				
			||||||
                end else
 | 
					 | 
				
			||||||
                    // Delete request because wafer image may never become available.
 | 
					 | 
				
			||||||
                    Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            Repeat
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
        Unlock hSysLists, ServiceKeyID else Null    
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
end service
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
// PostToWaferImageQueue
 | 
					// PostToWaferImageQueue
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@ -1753,9 +1631,7 @@ Service ROTRImpactReport()
 | 
				
			|||||||
            column = OleGetProperty( xlSht, 'Range' , 'K:K' )
 | 
					            column = OleGetProperty( xlSht, 'Range' , 'K:K' )
 | 
				
			||||||
            OlePutProperty( column , 'ColumnWidth' , '15' )
 | 
					            OlePutProperty( column , 'ColumnWidth' , '15' )
 | 
				
			||||||
            OlePutProperty( column , 'NumberFormat' , '0.0%' )     
 | 
					            OlePutProperty( column , 'NumberFormat' , '0.0%' )     
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
@ -1802,6 +1678,8 @@ end service
 | 
				
			|||||||
//              False$ otherwise.
 | 
					//              False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
 | 
					Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'PreEpiSignatureReady'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
 | 
				
			||||||
        ErrorMessage = 'RDSNo, Username, WaferQty, or Reactor not supplied in the ':Service:' service.'
 | 
					        ErrorMessage = 'RDSNo, Username, WaferQty, or Reactor not supplied in the ':Service:' service.'
 | 
				
			||||||
@ -1900,6 +1778,8 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)    
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1916,6 +1796,8 @@ end service
 | 
				
			|||||||
//  Reponse   - True$ if PRE stage was successfully signed, False$ otherwise.
 | 
					//  Reponse   - True$ if PRE stage was successfully signed, False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
					Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'SignPreEpiStage'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Error_Services('Clear')
 | 
					    Error_Services('Clear')
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
 | 
				
			||||||
@ -1967,8 +1849,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    PreEpiSig   = RDSRec<RDS_PRE_EPI_SIG$>
 | 
					    PreEpiSig   = RDSRec<RDS_PRE_EPI_SIG$>
 | 
				
			||||||
    ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
 | 
					    ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
 | 
				
			||||||
    // Removing OI_SUPERUSER wrappers to alleviate signature issues. 11/18/19 djs
 | 
					 | 
				
			||||||
*    IF MemberOf(Username, 'OI_SUPERUSER') THEN
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
	IF ReactorType NE 'EPP' THEN
 | 
						IF ReactorType NE 'EPP' THEN
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -1994,7 +1874,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			|||||||
				SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
 | 
									SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
 | 
				
			||||||
				owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
 | 
									owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
 | 
				
			||||||
				* Sets VER signature
 | 
									* Sets VER signature
 | 
				
			||||||
*                    obj_WO_Mat('SetSignature',owmParms)
 | 
					 | 
				
			||||||
				errCode = ''
 | 
									errCode = ''
 | 
				
			||||||
				IF Get_Status(errCode) THEN
 | 
									IF Get_Status(errCode) THEN
 | 
				
			||||||
					ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
										ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
				
			||||||
@ -2031,8 +1910,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
	END	;* End of check for Reactor Type   
 | 
						END	;* End of check for Reactor Type   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*    END           
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SigDate = OCONV( Date(), 'D2/' )
 | 
					    SigDate = OCONV( Date(), 'D2/' )
 | 
				
			||||||
    SigTime	= OCONV( Time(), 'MTS' )
 | 
					    SigTime	= OCONV( Time(), 'MTS' )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2045,7 +1922,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:Username:@RM:SigDate:' ':SigTime	;* Sets VER signature
 | 
					        owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:Username:@RM:SigDate:' ':SigTime	;* Sets VER signature
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
*        obj_WO_Mat('SetSignature',owmParms)
 | 
					 | 
				
			||||||
        IF Get_Status(errCode) THEN
 | 
					        IF Get_Status(errCode) THEN
 | 
				
			||||||
            ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
 | 
					            ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
 | 
				
			||||||
            Error_Services('Set', ErrorMessage)
 | 
					            Error_Services('Set', ErrorMessage)
 | 
				
			||||||
@ -2099,6 +1975,8 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2118,6 +1996,8 @@ end service
 | 
				
			|||||||
//              False$ otherwise.
 | 
					//              False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
 | 
					Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'LoadSignatureReady'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Error_Services('Clear')
 | 
					    Error_Services('Clear')
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
				
			||||||
@ -2210,16 +2090,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
				
			|||||||
        return
 | 
					        return
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //Added 8/18/2021 JRO - checks to make sure recipe limits aren't oos
 | 
					 | 
				
			||||||
* 	IF ParamOutOfSpec then
 | 
					 | 
				
			||||||
*        IF Supplement NE True$ then
 | 
					 | 
				
			||||||
*            ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
 | 
					 | 
				
			||||||
*            Error_Services('Set', ErrorMsg)
 | 
					 | 
				
			||||||
*            Response = False$
 | 
					 | 
				
			||||||
*            return
 | 
					 | 
				
			||||||
*        end
 | 
					 | 
				
			||||||
* 	end
 | 
					 | 
				
			||||||
    Locate True$ in ParamOutOfSpec using @VM setting oPos then
 | 
					    Locate True$ in ParamOutOfSpec using @VM setting oPos then
 | 
				
			||||||
 | 
					    	
 | 
				
			||||||
		IF Supplement NE True$ then
 | 
							IF Supplement NE True$ then
 | 
				
			||||||
            ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
 | 
					            ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
 | 
				
			||||||
            Error_Services('Set', ErrorMsg)
 | 
					            Error_Services('Set', ErrorMsg)
 | 
				
			||||||
@ -2234,13 +2106,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
				
			|||||||
        return
 | 
					        return
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*    IF (ReactorType = 'ASM+' OR ReactorType = 'HTR') AND (LoadLockVal EQ '') THEN
 | 
					 | 
				
			||||||
*        ErrorMsg = 'Process Error: Load Lock Side must be set to either Left or Right before signing.'
 | 
					 | 
				
			||||||
*        Error_Services('Set', ErrorMsg)
 | 
					 | 
				
			||||||
*        Response = False$
 | 
					 | 
				
			||||||
*        return
 | 
					 | 
				
			||||||
*    END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	//Added JRO 3/16/2021
 | 
						//Added JRO 3/16/2021
 | 
				
			||||||
    //Load Lock Required Check
 | 
					    //Load Lock Required Check
 | 
				
			||||||
    LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');                      
 | 
					    LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');                      
 | 
				
			||||||
@ -2314,8 +2179,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
				
			|||||||
        Return
 | 
					        Return
 | 
				
			||||||
    END
 | 
					    END
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
*    IF ReactorType NE 'EPP' THEN
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
	If PreFlag EQ True$ then
 | 
						If PreFlag EQ True$ then
 | 
				
			||||||
		// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
 | 
							// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
 | 
				
			||||||
		// using the barcode scanner, which attempts to sign both stages at once to save time.       
 | 
							// using the barcode scanner, which attempts to sign both stages at once to save time.       
 | 
				
			||||||
@ -2337,27 +2200,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
				
			|||||||
		Return
 | 
							Return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!   Deprecated 11/20/2019
 | 
					 | 
				
			||||||
*        Set_Status(0)
 | 
					 | 
				
			||||||
*        obj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'LOAD')
 | 
					 | 
				
			||||||
*        IF Get_Status(errCode) THEN
 | 
					 | 
				
			||||||
*            ErrorMsg = 'Process Error: Error calling obj_WO_Mat("CheckSigOrder"). Error code: ':errCode
 | 
					 | 
				
			||||||
*            Error_Services('Set', ErrorMsg)
 | 
					 | 
				
			||||||
*            Response = False$
 | 
					 | 
				
			||||||
*            RETURN
 | 
					 | 
				
			||||||
*        END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*    END	;* End of check for Epi Pro
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     // Deprecated in favor of stage specific supplements
 | 
					 | 
				
			||||||
*    SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
 | 
					 | 
				
			||||||
*    IF (SupplAckReq EQ True$) then 
 | 
					 | 
				
			||||||
*        ErrorMsg = 'The RDS Supplement must be acknowledged before the load operation can be signed.'
 | 
					 | 
				
			||||||
*        Error_Services('Set', ErrorMsg)
 | 
					 | 
				
			||||||
*        Response = False$
 | 
					 | 
				
			||||||
*        Return
 | 
					 | 
				
			||||||
*    END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
 | 
					    SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
 | 
				
			||||||
    SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
 | 
					    SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
 | 
				
			||||||
    PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X')
 | 
					    PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X')
 | 
				
			||||||
@ -2402,9 +2244,13 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service LoadExtra1stReady(RDSNo)
 | 
					Service LoadExtra1stReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2416,9 +2262,12 @@ Service LoadExtra1stReady(RDSNo)
 | 
				
			|||||||
	If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ ''  and StandardUnloadSignature EQ '' then
 | 
						If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ ''  and StandardUnloadSignature EQ '' then
 | 
				
			||||||
		Response = True$
 | 
							Response = True$
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnsignLoadExtra1stReady(RDSNo)
 | 
					Service UnsignLoadExtra1stReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2435,7 +2284,9 @@ Service UnsignLoadExtra1stReady(RDSNo)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service LoadExtra2ndReady(RDSNo)
 | 
					Service LoadExtra2ndReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2447,9 +2298,12 @@ Service LoadExtra2ndReady(RDSNo)
 | 
				
			|||||||
	If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
 | 
						If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
 | 
				
			||||||
		Response = True$
 | 
							Response = True$
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnsignLoadExtra2ndReady(RDSNo)
 | 
					Service UnsignLoadExtra2ndReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2463,8 +2317,10 @@ Service UnsignLoadExtra2ndReady(RDSNo)
 | 
				
			|||||||
			Response = True$
 | 
								Response = True$
 | 
				
			||||||
		end		
 | 
							end		
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
// SignLoadStage
 | 
					// SignLoadStage
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@ -2478,6 +2334,8 @@ end service
 | 
				
			|||||||
//              False$ otherwise.
 | 
					//              False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
 | 
					Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'SignLoadStage'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Error_Services('Clear')
 | 
					    Error_Services('Clear')
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
				
			||||||
@ -2685,6 +2543,8 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2700,6 +2560,8 @@ end service
 | 
				
			|||||||
//              False$ otherwise.
 | 
					//              False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
					Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'UnloadSignatureReady'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then
 | 
				
			||||||
        ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.'
 | 
					        ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.'
 | 
				
			||||||
@ -2749,10 +2611,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
    ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
 | 
					    ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   
 | 
					 | 
				
			||||||
*    IF ReactorType NE 'EPP' THEN
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
	If ReactorType EQ 'EPP' then
 | 
						If ReactorType EQ 'EPP' then
 | 
				
			||||||
		WOMatKey = ''
 | 
							WOMatKey = ''
 | 
				
			||||||
	end else
 | 
						end else
 | 
				
			||||||
@ -2765,24 +2623,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
*    END ELSE
 | 
					 | 
				
			||||||
*        
 | 
					 | 
				
			||||||
*        ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')        
 | 
					 | 
				
			||||||
*        LOCATE 'LWI' IN ReactRunRec<REACT_RUN_CI_STAGE$> USING @VM SETTING Pos THEN
 | 
					 | 
				
			||||||
*            CINo = ReactRunRec<REACT_RUN_CI_NO$>           
 | 
					 | 
				
			||||||
*            Actions = obj_Clean_Insp('GetActions',CINo)            
 | 
					 | 
				
			||||||
*            LOCATE 'Inspection' IN Actions<ACTION$ACTIONS> USING @FM SETTING Pos THEN                
 | 
					 | 
				
			||||||
*                IF Actions<ACTION$SIGS,1> = '' THEN
 | 
					 | 
				
			||||||
*                    ErrorMsg = 'Process Error: A Wafer Inspection is required and has not been completed.'
 | 
					 | 
				
			||||||
*                    Error_Services('Set', ErrorMsg)
 | 
					 | 
				
			||||||
*                    Response = False$
 | 
					 | 
				
			||||||
*                    return
 | 
					 | 
				
			||||||
*                END
 | 
					 | 
				
			||||||
*            END
 | 
					 | 
				
			||||||
*        END
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*    END	;* End of check for EpiPRO (EPP) reactor type
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
 | 
					    LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
 | 
				
			||||||
    If LWIInstAckReq EQ True$ then
 | 
					    If LWIInstAckReq EQ True$ then
 | 
				
			||||||
        ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.'
 | 
					        ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.'
 | 
				
			||||||
@ -2799,7 +2639,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
				
			|||||||
        return
 | 
					        return
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
                  
 | 
					                  
 | 
				
			||||||
    ! Todo: We will have to define special logic for the barcode application to handle extra loads and unloads.
 | 
					 | 
				
			||||||
    * Check for extra unloads without corresponding extra load                              
 | 
					    * Check for extra unloads without corresponding extra load                              
 | 
				
			||||||
    IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
 | 
					    IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
 | 
				
			||||||
            IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
 | 
					            IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
 | 
				
			||||||
@ -2869,9 +2708,13 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnloadExtra1stReady(RDSNo)
 | 
					Service UnloadExtra1stReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2883,9 +2726,12 @@ Service UnloadExtra1stReady(RDSNo)
 | 
				
			|||||||
	If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
 | 
						If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
 | 
				
			||||||
		Response = True$
 | 
							Response = True$
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnloadExtra2ndReady(RDSNo)
 | 
					Service UnloadExtra2ndReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2897,9 +2743,12 @@ Service UnloadExtra2ndReady(RDSNo)
 | 
				
			|||||||
	If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ ''  and StandardUnloadSignature EQ '' then
 | 
						If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ ''  and StandardUnloadSignature EQ '' then
 | 
				
			||||||
		Response = True$
 | 
							Response = True$
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnsignUnloadExtra1stReady(RDSNo)
 | 
					Service UnsignUnloadExtra1stReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2916,7 +2765,9 @@ Service UnsignUnloadExtra1stReady(RDSNo)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UnsignUnloadExtra2ndReady(RDSNo)
 | 
					Service UnsignUnloadExtra2ndReady(RDSNo)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
						StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
				
			||||||
@ -2930,6 +2781,7 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
 | 
				
			|||||||
			Response = True$
 | 
								Response = True$
 | 
				
			||||||
		end		
 | 
							end		
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2944,6 +2796,9 @@ end service
 | 
				
			|||||||
//  Response  - True$ if UNLOAD stage was successfully signed , False$ otherwise.
 | 
					//  Response  - True$ if UNLOAD stage was successfully signed , False$ otherwise.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
					Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'SignUnloadStage'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    If (RDSNo EQ '') or (Username EQ '') then
 | 
					    If (RDSNo EQ '') or (Username EQ '') then
 | 
				
			||||||
        ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.'
 | 
					        ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.'
 | 
				
			||||||
        Error_Services('Add', ErrorMsg)
 | 
					        Error_Services('Add', ErrorMsg)
 | 
				
			||||||
@ -3016,7 +2871,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        * 4/30/2013 JCH added parms for merging of two methods			
 | 
					        * 4/30/2013 JCH added parms for merging of two methods			
 | 
				
			||||||
        owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ReactID:@RM:ReactWH:@RM:ReactLoc:@RM:Tag		
 | 
					        owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ReactID:@RM:ReactWH:@RM:ReactLoc:@RM:Tag		
 | 
				
			||||||
*        obj_WO_Mat('SetSignature',owmParms)
 | 
					 | 
				
			||||||
                        
 | 
					                        
 | 
				
			||||||
        IF Get_Status(errCode) THEN
 | 
					        IF Get_Status(errCode) THEN
 | 
				
			||||||
            ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
 | 
					            ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
 | 
				
			||||||
@ -3050,9 +2904,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
 | 
					            obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
 | 
				
			||||||
            IF Get_Status(errCode) THEN
 | 
					            IF Get_Status(errCode) THEN
 | 
				
			||||||
*                ErrorMsg = 'Process Error: Error calling Obj_React_Status("CassUnload") within the ':Service:' service'
 | 
					 | 
				
			||||||
*                Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
*                Response = False$
 | 
					 | 
				
			||||||
                LogData = ''
 | 
					                LogData = ''
 | 
				
			||||||
                LogData<1> = LoggingDTM
 | 
					                LogData<1> = LoggingDTM
 | 
				
			||||||
                LogData<2> = @User4
 | 
					                LogData<2> = @User4
 | 
				
			||||||
@ -3068,7 +2919,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
				
			|||||||
        InCassettes = RDSRec<RDS_IN_CASS_NO$>
 | 
					        InCassettes = RDSRec<RDS_IN_CASS_NO$>
 | 
				
			||||||
        InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
 | 
					        InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
 | 
				
			||||||
        obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
 | 
					        obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
 | 
				
			||||||
        //Reactor_Services('IncrementWfrMetrics', RDSNo)
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
    RDSRec<RDS_OPERATOR_OUT$> = SigBy
 | 
					    RDSRec<RDS_OPERATOR_OUT$> = SigBy
 | 
				
			||||||
@ -3141,6 +2991,8 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
				
			|||||||
        Response = False$
 | 
					        Response = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3475,97 +3327,9 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
            NEXT Index
 | 
					            NEXT Index
 | 
				
			||||||
        END
 | 
					        END
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					 | 
				
			||||||
        **********************************************
 | 
					 | 
				
			||||||
        * Verify the FlatFinder information          *
 | 
					 | 
				
			||||||
        **********************************************
 | 
					 | 
				
			||||||
        EpiPartNo               = {EPI_PART_NO}
 | 
					 | 
				
			||||||
        WaferSize               = Xlate('EPI_PART', EpiPartNo, 'SUB_WAFER_SIZE', 'X')
 | 
					 | 
				
			||||||
        WaferSizeInch           = Field(WaferSize, ' ', 3, 1)
 | 
					 | 
				
			||||||
        CustNo                  = {CUST_NO}
 | 
					 | 
				
			||||||
        CompanyRow              = Xlate('COMPANY', CustNo, '', 'X')
 | 
					 | 
				
			||||||
		WafersOut				= {WFRS_OUT}        
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        Begin Case
 | 
					 | 
				
			||||||
        	
 | 
					 | 
				
			||||||
        	Case WaferSizeInch = '6'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				WaferFlatSizeInches     = CompanyRow<COMPANY_WAFER_FLAT_WAFER_SIZE_INCH$>
 | 
					 | 
				
			||||||
				WaferFlatLengthMins     = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MIN$>, 'MD1')
 | 
					 | 
				
			||||||
				WaferFlatLengthMaxes    = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MAX$>, 'MD1')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				Locate WaferSizeInch in WaferFlatSizeInches using @VM setting vPos then
 | 
					 | 
				
			||||||
					WaferFlatLengthMin  = WaferFlatLengthMins<0, vPos>
 | 
					 | 
				
			||||||
					WaferFlatLengthMax  = WaferFlatLengthMaxes<0, vPos>
 | 
					 | 
				
			||||||
				end else
 | 
					 | 
				
			||||||
					WaferFlatLengthMin  = ''
 | 
					 | 
				
			||||||
					WaferFlatLengthMax  = ''
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				// Get FlatFinder Read Value
 | 
					 | 
				
			||||||
*				FlatFinderWafersQty     = {FLATFINDER_WAFER_CNT}
 | 
					 | 
				
			||||||
				FlatFinderWaferLength   = {FLATFINDER_FLAT_LENGTH}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				***************************************
 | 
					 | 
				
			||||||
				* FlatFinder - Wafers Quatity Section *
 | 
					 | 
				
			||||||
				***************************************
 | 
					 | 
				
			||||||
*				If (FlatFinderWafersQty NE '') then
 | 
					 | 
				
			||||||
*					If (FlatFinderWafersQty NE WafersOut) then
 | 
					 | 
				
			||||||
*						ErrorMsg = 'Unable to sign FQA because Flat Finder and Wafers Out quantities do not match.'
 | 
					 | 
				
			||||||
*						Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
*						return
 | 
					 | 
				
			||||||
*					end
 | 
					 | 
				
			||||||
*				end else
 | 
					 | 
				
			||||||
*					ErrorMsg = 'Unable to sign FQA because the Flat Finder quantity is missing.'
 | 
					 | 
				
			||||||
*					Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
*					return
 | 
					 | 
				
			||||||
*				end
 | 
					 | 
				
			||||||
				************************************
 | 
					 | 
				
			||||||
				* FlatFinder - Flat Length Section *
 | 
					 | 
				
			||||||
				************************************
 | 
					 | 
				
			||||||
				If (WaferFlatLengthMin NE '') AND (WaferFlatLengthMax NE '') then
 | 
					 | 
				
			||||||
					If (FlatFinderWaferLength NE '') then
 | 
					 | 
				
			||||||
						If (FlatFinderWaferLength GE WaferFlatLengthMin) AND (FlatFinderWaferLength LE WaferFlatLengthMax) then
 | 
					 | 
				
			||||||
						end else
 | 
					 | 
				
			||||||
							ErrorMsg = 'Unable to sign FQA because Flat Finder wafer lengths are out of bounds.'
 | 
					 | 
				
			||||||
							Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
							return
 | 
					 | 
				
			||||||
						end
 | 
					 | 
				
			||||||
					end else
 | 
					 | 
				
			||||||
						ErrorMsg = 'Unable to sign FQA because the Flat Finder wafer length is missing.'
 | 
					 | 
				
			||||||
						Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
						return
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
        	
 | 
					 | 
				
			||||||
        	Case WaferSizeInch = '8'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				// Get NotchFinder Read Value
 | 
					 | 
				
			||||||
*				NotchFinderWafersQty     = {FLATFINDER_WAFER_CNT}
 | 
					 | 
				
			||||||
* 
 | 
					 | 
				
			||||||
*				***************************************
 | 
					 | 
				
			||||||
*				* NotchFinder - Wafers Quatity Section *
 | 
					 | 
				
			||||||
*				***************************************
 | 
					 | 
				
			||||||
*				If (NotchFinderWafersQty NE '') then
 | 
					 | 
				
			||||||
*					If (NotchFinderWafersQty NE WafersOut) then
 | 
					 | 
				
			||||||
*						ErrorMsg = 'Unable to sign FQA because Notch Finder and Wafers Out quantities do not match.'
 | 
					 | 
				
			||||||
*						Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
*						return
 | 
					 | 
				
			||||||
*					end
 | 
					 | 
				
			||||||
*				end else
 | 
					 | 
				
			||||||
*					ErrorMsg = 'Unable to sign FQA because the Notch Finder quantity is missing.'
 | 
					 | 
				
			||||||
*					Error_Services('Add', ErrorMsg)
 | 
					 | 
				
			||||||
*					return
 | 
					 | 
				
			||||||
*				end
 | 
					 | 
				
			||||||
        	
 | 
					 | 
				
			||||||
        	Case 1
 | 
					 | 
				
			||||||
        End Case
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        *************************
 | 
					        *************************
 | 
				
			||||||
        * Verify Wafer Quantity *
 | 
					        * Verify Wafer Quantity *
 | 
				
			||||||
        *************************
 | 
					        *************************
 | 
				
			||||||
        ! The barcode application will need to inform the user that an override is required. We will return an error for
 | 
					 | 
				
			||||||
        ! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
 | 
					 | 
				
			||||||
        CassSchedWafers = {CASS_SHIP_QTY}
 | 
					        CassSchedWafers = {CASS_SHIP_QTY}
 | 
				
			||||||
        WafersOut       = {WFRS_OUT}
 | 
					        WafersOut       = {WFRS_OUT}
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@ -3585,13 +3349,9 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
                    
 | 
					                    
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        *********************************
 | 
					        *********************************
 | 
				
			||||||
        * Verify NCR total >= USL Fails *
 | 
					        * Verify NCR total >= USL Fails *
 | 
				
			||||||
        *********************************
 | 
					        *********************************
 | 
				
			||||||
        ! The barcode application will need to inform the user that an override is required. We will return an error for
 | 
					 | 
				
			||||||
        ! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
 | 
					 | 
				
			||||||
        If Username EQ 'FRANCOIS_R' then
 | 
					 | 
				
			||||||
		NCRStatus = QA_Services('GetNCRStatus', RDSNo)
 | 
							NCRStatus = QA_Services('GetNCRStatus', RDSNo)
 | 
				
			||||||
		If NCRStatus EQ False$ then            
 | 
							If NCRStatus EQ False$ then            
 | 
				
			||||||
			If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
 | 
								If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
 | 
				
			||||||
@ -3601,7 +3361,6 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        *************************
 | 
					        *************************
 | 
				
			||||||
        * Verify if Shift exist *
 | 
					        * Verify if Shift exist *
 | 
				
			||||||
@ -3663,9 +3422,8 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
        Next Test
 | 
					        Next Test
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        ******************************************
 | 
					        ******************************************
 | 
				
			||||||
        * Verify Unload Stage QA Metrology Tests * On hold until approved for release to production
 | 
					        * Verify Unload Stage QA Metrology Tests * 
 | 
				
			||||||
        ******************************************
 | 
					        ******************************************
 | 
				
			||||||
        If Username EQ 'FRANCOIS_R' then
 | 
					 | 
				
			||||||
		WONo        = {WO}
 | 
							WONo        = {WO}
 | 
				
			||||||
		CassNo      = {CASS_NO}
 | 
							CassNo      = {CASS_NO}
 | 
				
			||||||
		WOMatQAKey  = WONo : '*' : CassNo
 | 
							WOMatQAKey  = WONo : '*' : CassNo
 | 
				
			||||||
@ -3677,7 +3435,6 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
			Error_Services('Add', ErrorMsg)
 | 
								Error_Services('Add', ErrorMsg)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        *******************************************
 | 
					        *******************************************
 | 
				
			||||||
        * Verify if all steps have been completed *
 | 
					        * Verify if all steps have been completed *
 | 
				
			||||||
@ -3750,8 +3507,6 @@ Service SignFQAStage(RDSNo, Username)
 | 
				
			|||||||
            ;* 4/30/2013 JCH added parms for merging of two methods    
 | 
					            ;* 4/30/2013 JCH added parms for merging of two methods    
 | 
				
			||||||
            owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'QA':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ToolID:@RM:WHCd:@RM:LocCd:@RM:Tag 
 | 
					            owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'QA':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ToolID:@RM:WHCd:@RM:LocCd:@RM:Tag 
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
*            obj_WO_Mat('SetSignature',owmParms)        ; * * * * * S I G N A T U R E  * * * * * *
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            IF Get_Status(errCode) THEN
 | 
					            IF Get_Status(errCode) THEN
 | 
				
			||||||
                ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
					                ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
				
			||||||
                Error_Services('Add', ErrorMsg)
 | 
					                Error_Services('Add', ErrorMsg)
 | 
				
			||||||
@ -3888,3 +3643,4 @@ ClearCursors:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -254,8 +254,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
	end   
 | 
						end   
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	RDSNo          = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
						RDSNo          = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
				
			||||||
	WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
					 | 
				
			||||||
	If WCCheckEnabled then
 | 
					 | 
				
			||||||
	****************************************
 | 
						****************************************
 | 
				
			||||||
	* Verify the Wafer Counter information *
 | 
						* Verify the Wafer Counter information *
 | 
				
			||||||
	****************************************
 | 
						****************************************
 | 
				
			||||||
@ -274,7 +272,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
		ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
							ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
				
			||||||
		RETURN 0
 | 
							RETURN 0
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	***********************************
 | 
						***********************************
 | 
				
			||||||
	* Verify Scheduled Wafer Quantity *
 | 
						* Verify Scheduled Wafer Quantity *
 | 
				
			||||||
@ -446,10 +443,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
    ******************************************
 | 
					    ******************************************
 | 
				
			||||||
    * Verify Unload Stage QA Metrology Tests *
 | 
					    * Verify Unload Stage QA Metrology Tests *
 | 
				
			||||||
    ******************************************
 | 
					    ******************************************
 | 
				
			||||||
 | 
					 | 
				
			||||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    If (DevelopmentFlag EQ True$) then
 | 
					 | 
				
			||||||
	WONo        = Get_Property(@WINDOW:'.WO','DEFPROP')
 | 
						WONo        = Get_Property(@WINDOW:'.WO','DEFPROP')
 | 
				
			||||||
	CassNo      = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
 | 
						CassNo      = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
 | 
				
			||||||
	WOMatQAKey  = WONo : '*' : CassNo
 | 
						WOMatQAKey  = WONo : '*' : CassNo
 | 
				
			||||||
@ -465,7 +458,6 @@ Event SIGN_BUTTON.CLICK()
 | 
				
			|||||||
		ErrMsg(ErrorMsg)
 | 
							ErrMsg(ErrorMsg)
 | 
				
			||||||
		Return
 | 
							Return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    *******************************************
 | 
					    *******************************************
 | 
				
			||||||
    * Verify if all steps have been completed *
 | 
					    * Verify if all steps have been completed *
 | 
				
			||||||
 | 
				
			|||||||
@ -115,7 +115,7 @@ AutoDisplayErrors = FALSE$     ; // Set this to True$ when debugging so all erro
 | 
				
			|||||||
Declare subroutine  SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
 | 
					Declare subroutine  SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
 | 
				
			||||||
Declare subroutine  RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
 | 
					Declare subroutine  RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
 | 
				
			||||||
Declare subroutine  Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status	, Reactor_Services
 | 
					Declare subroutine  Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status	, Reactor_Services
 | 
				
			||||||
Declare subroutine  Rds_Services, Obj_Post_Log
 | 
					Declare subroutine  Rds_Services, Obj_Post_Log, Mona_Services
 | 
				
			||||||
Declare function    SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
 | 
					Declare function    SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
 | 
				
			||||||
Declare function    Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
 | 
					Declare function    Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
 | 
				
			||||||
Declare function    Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
 | 
					Declare function    Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
 | 
				
			||||||
@ -131,6 +131,13 @@ Headers       = 'Logging DTM':@FM:'Ctrl':@FM:'Load/Calculate Time'
 | 
				
			|||||||
objCtrlLog    = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
 | 
					objCtrlLog    = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
 | 
				
			||||||
LoggingDTM    = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM    = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_RDSSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_RDSSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
						Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -226,6 +233,8 @@ End Service
 | 
				
			|||||||
// to an RDS record.
 | 
					// to an RDS record.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service AddComment(RDSNo, Comment, UsernameOpt)
 | 
					Service AddComment(RDSNo, Comment, UsernameOpt)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'AddComment'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	RDSRow   = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
						RDSRow   = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
				
			||||||
	Username = @USER4
 | 
						Username = @USER4
 | 
				
			||||||
@ -248,6 +257,8 @@ Service AddComment(RDSNo, Comment, UsernameOpt)
 | 
				
			|||||||
	oblParms := "TOP" :@VM: "TOP" :@VM: "TOP"
 | 
						oblParms := "TOP" :@VM: "TOP" :@VM: "TOP"
 | 
				
			||||||
	obj_Post_Log('Create',oblParms)
 | 
						obj_Post_Log('Create',oblParms)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
End Service
 | 
					End Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -750,6 +761,9 @@ Service IsValidSubLot(RDSNo, RDSType, SupplierLot)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
 | 
					Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetRDSRunHistoryByReactorAndWO'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	table = "RDS"
 | 
						table = "RDS"
 | 
				
			||||||
	ErrorMessage = ''
 | 
						ErrorMessage = ''
 | 
				
			||||||
	RDSRecords = ''
 | 
						RDSRecords = ''
 | 
				
			||||||
@ -783,10 +797,16 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
 | 
				
			|||||||
    	end
 | 
					    	end
 | 
				
			||||||
    Next RDS
 | 
					    Next RDS
 | 
				
			||||||
    Response = FinalRDSSortedByAssignmentDTM<1>
 | 
					    Response = FinalRDSSortedByAssignmentDTM<1>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service IsTWLoggingReqd(RDSNo)
 | 
					Service IsTWLoggingReqd(RDSNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'IsTWLoggingReqd'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    IsTWReqd            = False$
 | 
					    IsTWReqd            = False$
 | 
				
			||||||
    ExistingTWRuns      = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
 | 
					    ExistingTWRuns      = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
 | 
				
			||||||
    If ExistingTWRuns EQ '' then
 | 
					    If ExistingTWRuns EQ '' then
 | 
				
			||||||
@ -809,7 +829,7 @@ Service IsTWLoggingReqd(RDSNo)
 | 
				
			|||||||
                Layer = Field(PRSPropKey, '*', 2)
 | 
					                Layer = Field(PRSPropKey, '*', 2)
 | 
				
			||||||
                MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
 | 
					                MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
 | 
				
			||||||
                Start = PRSPropRec<PRS_PROP_MET_START$>
 | 
					                Start = PRSPropRec<PRS_PROP_MET_START$>
 | 
				
			||||||
                If WaferType NE 'Product' AND WaferType NE 'Prod' then
 | 
					                If WaferType NE 'Product' AND WaferType NE 'Prod' AND WaferType NE '' then
 | 
				
			||||||
                    BEGIN CASE
 | 
					                    BEGIN CASE
 | 
				
			||||||
                        CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1	; IsTWReqd = 1
 | 
					                        CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1	; IsTWReqd = 1
 | 
				
			||||||
                        CASE ThisReactorRunOrder = Start					; IsTWReqd = 1
 | 
					                        CASE ThisReactorRunOrder = Start					; IsTWReqd = 1
 | 
				
			||||||
@ -847,6 +867,9 @@ Service IsTWLoggingReqd(RDSNo)
 | 
				
			|||||||
        IsTWReqd = False$
 | 
					        IsTWReqd = False$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    Response = IsTWReqd
 | 
					    Response = IsTWReqd
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service TestWaferRanAfterLoad(RDSNo)
 | 
					Service TestWaferRanAfterLoad(RDSNo)
 | 
				
			||||||
@ -1099,6 +1122,8 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CopyRDSLayerParameters(RDSNo)
 | 
					Service CopyRDSLayerParameters(RDSNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CopyRDSLayerParameters'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	If (RDSNo NE '') then
 | 
						If (RDSNo NE '') then
 | 
				
			||||||
		RunOrderNo  = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
 | 
							RunOrderNo  = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
 | 
				
			||||||
@ -1151,6 +1176,8 @@ Service CopyRDSLayerParameters(RDSNo)
 | 
				
			|||||||
		Error_Services('Add', 'RDSNo not supplied in ':Service:' service.')
 | 
							Error_Services('Add', 'RDSNo not supplied in ':Service:' service.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1828,3 +1855,5 @@ return
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -78,7 +78,7 @@ Declare function    SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Se
 | 
				
			|||||||
Declare function    Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage
 | 
					Declare function    Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage
 | 
				
			||||||
Declare function    Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services
 | 
					Declare function    Datetime, Reactor_Modes_Services, Work_Order_Services, React_Mode_NG_Services, Lsl_Users_Services
 | 
				
			||||||
Declare function    SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services
 | 
					Declare function    SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services
 | 
				
			||||||
Declare function	Nica_Orders_Services, Max, RTI_CreateGUID
 | 
					Declare function	Nica_Orders_Services, Max, RTI_CreateGUID, GetTickCount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Report paths for various performance report services.
 | 
					// Report paths for various performance report services.
 | 
				
			||||||
TemplatesFolder     = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
 | 
					TemplatesFolder     = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
 | 
				
			||||||
@ -91,6 +91,13 @@ LogDate     = Oconv(Date(), 'D4/')
 | 
				
			|||||||
LogTime     = Oconv(Time(), 'MTS')
 | 
					LogTime     = Oconv(Time(), 'MTS')
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_REACTORSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_REACTORSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -116,6 +123,8 @@ Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK'
 | 
				
			|||||||
// 
 | 
					// 
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service IncrementWfrMetrics(RDSNo)
 | 
					Service IncrementWfrMetrics(RDSNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'IncrementWfrMetrics'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Get Reactor and run count details
 | 
						// Get Reactor and run count details
 | 
				
			||||||
	RDSRec          = Xlate('RDS', RDSNo, '', 'X', '')
 | 
						RDSRec          = Xlate('RDS', RDSNo, '', 'X', '')
 | 
				
			||||||
@ -217,6 +226,8 @@ Service IncrementWfrMetrics(RDSNo)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0)
 | 
						Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2031,16 +2042,35 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
 | 
				
			|||||||
			If ErrorMsg EQ '' then
 | 
								If ErrorMsg EQ '' then
 | 
				
			||||||
			    AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM',  FEATURE_FLAGS.ENABLED$, 'X')
 | 
								    AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM',  FEATURE_FLAGS.ENABLED$, 'X')
 | 
				
			||||||
			    If AbortAlarmFeatureFlag EQ True$ then
 | 
								    If AbortAlarmFeatureFlag EQ True$ then
 | 
				
			||||||
 | 
					                    If IntrMaintFeatureFlag EQ True$ then
 | 
				
			||||||
 | 
					                        AbortAlarmFromIntrusiveMaintRequired = Nica_Orders_Services('AbortAlarmFromIntrusiveMaintRequired', ReactNo)
 | 
				
			||||||
 | 
					                        ActiveIntrusiveMaintChecklists       = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'INTRUSIVE_MAINT')
 | 
				
			||||||
 | 
					                        IntrusiveMaintChecklistActive        = (ActiveIntrusiveMaintChecklists NE '')                        
 | 
				
			||||||
 | 
					                    end else
 | 
				
			||||||
 | 
					                        AbortAlarmFromIntrusiveMaintRequired = False$
 | 
				
			||||||
 | 
					                        IntrusiveMaintChecklistActive        = False$
 | 
				
			||||||
 | 
					                    end
 | 
				
			||||||
			        ModeSubCatFlowId       = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$, 'X')
 | 
								        ModeSubCatFlowId       = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_FLOW_ID$, 'X')
 | 
				
			||||||
			        ModeSubCatRespLvl      = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
 | 
								        ModeSubCatRespLvl      = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
 | 
				
			||||||
			        AbortAlarmComp         = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
 | 
								        AbortAlarmComp         = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
 | 
				
			||||||
			        ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
 | 
								        ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
 | 
				
			||||||
			        AbortAlarmOrderActive  = (ActiveAbortAlarmOrders NE '')
 | 
								        AbortAlarmOrderActive  = (ActiveAbortAlarmOrders NE '')
 | 
				
			||||||
 | 
					                    ReactorType            = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
 | 
				
			||||||
 | 
					                    ChecklistIds           = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)			        
 | 
				
			||||||
 | 
								        CreateAbortAlarmOrder  = False$
 | 
				
			||||||
 | 
								        Intrusive              = False$
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
			        Begin Case
 | 
								        Begin Case
 | 
				
			||||||
			            Case ( AbortAlarmOrderActive and (SelE10State _EQC 'Productive') )
 | 
								            Case ( AbortAlarmOrderActive and (SelE10State _EQC 'Productive') )
 | 
				
			||||||
			                ErrorMsg = "An ABORT/ALARM Checklist is active for this reactor and must be completed or overridden in order to change to a productive state."
 | 
								                ErrorMsg = "An ABORT/ALARM Checklist is active for this reactor and must be completed or overridden in order to change to a productive state."
 | 
				
			||||||
			                
 | 
								                
 | 
				
			||||||
			            Case ( AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
 | 
								            Case ( AbortAlarmFromIntrusiveMaintRequired and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') )
 | 
				
			||||||
 | 
								                // INTRUSIVE_MAINT FIRST_PRODUCT_RUN_THICK or FIRST_PRODUCT_RUN_HGCV checklist started and
 | 
				
			||||||
 | 
								                // ABORT/ALARM mode entered, so create an ABORT/ALARM order to contain product in reactor.
 | 
				
			||||||
 | 
								                CreateAbortAlarmOrder = True$
 | 
				
			||||||
 | 
								                Intrusive             = True$
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
								            Case ( Not(IntrusiveMaintChecklistActive) and AbortAlarmOrderActive and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
 | 
				
			||||||
                            // If there is an active ABORT/ALARM NICA order, then we need to check if the new sub mode is different than the sub mode entered when the ABORT/ALARM
 | 
					                            // If there is an active ABORT/ALARM NICA order, then we need to check if the new sub mode is different than the sub mode entered when the ABORT/ALARM
 | 
				
			||||||
                            // NICA order was created and is of a higher response level or the new mode is WAITING_FOR_OPERATOR and the sub mode has changed. This means the maintenance
 | 
					                            // NICA order was created and is of a higher response level or the new mode is WAITING_FOR_OPERATOR and the sub mode has changed. This means the maintenance
 | 
				
			||||||
                            // team deemed the true ABORT/ALARM root cause was different than the cause the operators selected.
 | 
					                            // team deemed the true ABORT/ALARM root cause was different than the cause the operators selected.
 | 
				
			||||||
@ -2052,26 +2082,26 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
 | 
				
			|||||||
                            Next ActiveAbortAlarmRespLvl
 | 
					                            Next ActiveAbortAlarmRespLvl
 | 
				
			||||||
                            If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
 | 
					                            If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
 | 
				
			||||||
                            or ( (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) and (ModeSubCatRespLvl GT MaxActiveRespLvl) ) then
 | 
					                            or ( (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) and (ModeSubCatRespLvl GT MaxActiveRespLvl) ) then
 | 
				
			||||||
								ReactorType  = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
 | 
					 | 
				
			||||||
								ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
 | 
					 | 
				
			||||||
								If ChecklistIds NE '' then 			                
 | 
													If ChecklistIds NE '' then 			                
 | 
				
			||||||
									Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
 | 
														CreateAbortAlarmOrder = True$
 | 
				
			||||||
									RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
 | 
					 | 
				
			||||||
								end                            	
 | 
													end                            	
 | 
				
			||||||
                            end
 | 
					                            end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			            Case ( Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
 | 
								            Case ( Not(IntrusiveMaintChecklistActive) and Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') )
 | 
				
			||||||
							ReactorType  = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
 | 
								                // Typical ABORT/ALARM case
 | 
				
			||||||
							ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
 | 
								                CreateAbortAlarmOrder = True$
 | 
				
			||||||
							If ChecklistIds NE '' then 			                
 | 
								                
 | 
				
			||||||
								Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
 | 
					 | 
				
			||||||
								RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
 | 
					 | 
				
			||||||
			                end
 | 
					 | 
				
			||||||
			            Case Otherwise$
 | 
								            Case Otherwise$
 | 
				
			||||||
			                // Don't create an ABORT/ALARM NICA order
 | 
								                // Don't create an ABORT/ALARM NICA order
 | 
				
			||||||
			                Null
 | 
								                Null
 | 
				
			||||||
			                
 | 
								                
 | 
				
			||||||
			        End Case
 | 
								        End Case
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
 | 
								        If CreateAbortAlarmOrder then
 | 
				
			||||||
 | 
					                        Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds, Intrusive)
 | 
				
			||||||
 | 
					                        RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'					            
 | 
				
			||||||
 | 
								        end
 | 
				
			||||||
 | 
								        
 | 
				
			||||||
			    end
 | 
								    end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
@ -3584,6 +3614,8 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetReactorAvailChamberCount(ReactNo)
 | 
					Service GetReactorAvailChamberCount(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetReactorAvailChamberCount'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	ErrMsg                = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
 | 
						ErrMsg                = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
 | 
				
			||||||
	AvailableChamberCount = 0
 | 
						AvailableChamberCount = 0
 | 
				
			||||||
@ -3603,6 +3635,8 @@ Service GetReactorAvailChamberCount(ReactNo)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
	Response = AvailableChamberCount
 | 
						Response = AvailableChamberCount
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4321,3 +4355,4 @@ ClearCursors:
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -45,9 +45,9 @@ $insert RDS_EQUATES
 | 
				
			|||||||
$insert SCAN_SETUP
 | 
					$insert SCAN_SETUP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare Function   Scan_Services, Database_Services, QA_Services, Datetime, RDS_Services, SRP_Array, SRP_Stopwatch
 | 
					Declare Function   Scan_Services, Database_Services, QA_Services, Datetime, RDS_Services, SRP_Array, SRP_Stopwatch
 | 
				
			||||||
Declare function   Logging_Services, Environment_Services
 | 
					Declare function   Logging_Services, Environment_Services, GetTickCount
 | 
				
			||||||
Declare Subroutine Scan_Services, Database_Services, QA_Services, obj_WO_Mat_Log, SRP_Stopwatch
 | 
					Declare Subroutine Scan_Services, Database_Services, QA_Services, obj_WO_Mat_Log, SRP_Stopwatch
 | 
				
			||||||
Declare Subroutine Logging_Services
 | 
					Declare Subroutine Logging_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LogPath      = Environment_Services('GetApplicationRootPath') : '\LogFiles\ScanAPI\APIResponseTime'; //Define the directory where the log will be saved to. This happens the first time of the day that the log is written to.
 | 
					LogPath      = Environment_Services('GetApplicationRootPath') : '\LogFiles\ScanAPI\APIResponseTime'; //Define the directory where the log will be saved to. This happens the first time of the day that the log is written to.
 | 
				
			||||||
LogDate      = Oconv(Date(), 'D4/')
 | 
					LogDate      = Oconv(Date(), 'D4/')
 | 
				
			||||||
@ -58,6 +58,13 @@ LogFileName      = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : '
 | 
				
			|||||||
Headers          = 'Logging DTM' : @FM : 'API' : @FM : 'ResponseTime' : @FM : 'ScanID' : @FM : 'ScanData' : @VM : 'StatusCode' ; //Define the column names in the log file, delimited by a Field Mark.
 | 
					Headers          = 'Logging DTM' : @FM : 'API' : @FM : 'ResponseTime' : @FM : 'ScanID' : @FM : 'ScanData' : @VM : 'StatusCode' ; //Define the column names in the log file, delimited by a Field Mark.
 | 
				
			||||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$); //Actually creates the log.
 | 
					objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$); //Actually creates the log.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCANAPI'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCANAPI'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
GoToAPI else
 | 
					GoToAPI else
 | 
				
			||||||
    // The specific resource endpoint doesn't have a API handler yet.
 | 
					    // The specific resource endpoint doesn't have a API handler yet.
 | 
				
			||||||
    HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
					    HTTP_Services('SetResponseStatus', 200, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
				
			||||||
@ -72,16 +79,25 @@ Return Response OR ''
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
API scan.POST
 | 
					API scan.POST
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'SCAN_POST'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    SRP_Stopwatch('Reset')
 | 
					    SRP_Stopwatch('Reset')
 | 
				
			||||||
    SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME')
 | 
				
			||||||
    ScanID  = Scan_Services('CreateScansRow')
 | 
					    ScanID  = Scan_Services('CreateScansRow')
 | 
				
			||||||
    If Error_Services('NoError') then
 | 
					    If Error_Services('NoError') then
 | 
				
			||||||
        StatusCode  = 201
 | 
					        StatusCode  = 201
 | 
				
			||||||
        GoSub CreateHALItem
 | 
					        GoSub CreateHALItem
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        Message = Error_Services('GetMessage')
 | 
					        Message = Error_Services('GetMessage')
 | 
				
			||||||
        HTTP_Services('SetResponseStatus', 500, Message)
 | 
					        HTTP_Services('SetResponseStatus', 500, Message)
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME')
 | 
				
			||||||
    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME')
 | 
					    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -100,6 +116,9 @@ end api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
API scan.ID.POST
 | 
					API scan.ID.POST
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'SCAN_ID_POST'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    SRP_Stopwatch('Reset')
 | 
					    SRP_Stopwatch('Reset')
 | 
				
			||||||
    SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
				
			||||||
    ScanID      = EndpointSegment
 | 
					    ScanID      = EndpointSegment
 | 
				
			||||||
@ -112,13 +131,20 @@ API scan.ID.POST
 | 
				
			|||||||
        If Error_Services('NoError') then
 | 
					        If Error_Services('NoError') then
 | 
				
			||||||
            StatusCode = 200
 | 
					            StatusCode = 200
 | 
				
			||||||
            GoSub CreateHALItem
 | 
					            GoSub CreateHALItem
 | 
				
			||||||
 | 
					            Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
        end else
 | 
					        end else
 | 
				
			||||||
            Message    = Error_Services('GetMessage')
 | 
					            Message    = Error_Services('GetMessage')
 | 
				
			||||||
            HTTP_Services('SetResponseStatus', 400, Message)
 | 
					            HTTP_Services('SetResponseStatus', 400, Message)
 | 
				
			||||||
 | 
					            Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
					        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
				
			||||||
    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
					    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -143,11 +169,19 @@ end api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
API scan.ID.HEAD
 | 
					API scan.ID.HEAD
 | 
				
			||||||
API scan.ID.GET
 | 
					API scan.ID.GET
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'SCAN_ID_GET'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    SRP_Stopwatch('Reset')
 | 
					    SRP_Stopwatch('Reset')
 | 
				
			||||||
    SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
				
			||||||
    ScanID     = EndpointSegment
 | 
					    ScanID     = EndpointSegment
 | 
				
			||||||
    StatusCode = 200
 | 
					    StatusCode = 200
 | 
				
			||||||
    GoSub CreateHALItem
 | 
					    GoSub CreateHALItem
 | 
				
			||||||
 | 
					    Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
				
			||||||
    TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
					    TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -166,6 +200,9 @@ end api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
API scan.ID.DELETE
 | 
					API scan.ID.DELETE
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'SCAN_ID_DELETE'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    SRP_Stopwatch('Reset')
 | 
					    SRP_Stopwatch('Reset')
 | 
				
			||||||
    SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
				
			||||||
    ScanID  = EndpointSegment
 | 
					    ScanID  = EndpointSegment
 | 
				
			||||||
@ -176,17 +213,25 @@ API scan.ID.DELETE
 | 
				
			|||||||
            Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$)
 | 
					            Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$)
 | 
				
			||||||
            If Error_Services('NoError') then
 | 
					            If Error_Services('NoError') then
 | 
				
			||||||
                HTTP_Services('SetResponseStatus', 200)
 | 
					                HTTP_Services('SetResponseStatus', 200)
 | 
				
			||||||
 | 
					                Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
            end else
 | 
					            end else
 | 
				
			||||||
                Message = Error_Services('GetMessage')
 | 
					                Message = Error_Services('GetMessage')
 | 
				
			||||||
                HTTP_Services('SetResponseStatus', 500, Message)
 | 
					                HTTP_Services('SetResponseStatus', 500, Message)
 | 
				
			||||||
 | 
					                Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
        end else
 | 
					        end else
 | 
				
			||||||
            HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.')
 | 
					            HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.')
 | 
				
			||||||
 | 
					            Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        Message = Error_Services('GetMessage')
 | 
					        Message = Error_Services('GetMessage')
 | 
				
			||||||
        HTTP_Services('SetResponseStatus', 404, Message)
 | 
					        HTTP_Services('SetResponseStatus', 404, Message)
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
				
			||||||
    TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
					    TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -205,6 +250,8 @@ end api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
API scan.ID.PATCH
 | 
					API scan.ID.PATCH
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
						MetricName = 'SCAN_ID_PATCH'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
    // This is where scans are ultimately accepted for final processing. We will need to determine which type
 | 
					    // This is where scans are ultimately accepted for final processing. We will need to determine which type
 | 
				
			||||||
    // of scan this is (i.e. Location, Pre-Epi + Load, or Unload). This will be determined by the data coming in and the
 | 
					    // of scan this is (i.e. Location, Pre-Epi + Load, or Unload). This will be determined by the data coming in and the
 | 
				
			||||||
@ -232,14 +279,17 @@ API scan.ID.PATCH
 | 
				
			|||||||
                    If Error_Services('NoError') then
 | 
					                    If Error_Services('NoError') then
 | 
				
			||||||
                        StatusCode  = 200
 | 
					                        StatusCode  = 200
 | 
				
			||||||
                        GoSub CreateHALItem
 | 
					                        GoSub CreateHALItem
 | 
				
			||||||
 | 
					                        Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
                    end else
 | 
					                    end else
 | 
				
			||||||
                        Message = Error_Services('GetMessage')
 | 
					                        Message = Error_Services('GetMessage')
 | 
				
			||||||
                        HTTP_Services('SetResponseStatus', 500, Message)
 | 
					                        HTTP_Services('SetResponseStatus', 500, Message)
 | 
				
			||||||
 | 
					                        Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
				
			||||||
                    end
 | 
					                    end
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                    SRP_JSON(hBody, 'Release')               
 | 
					                    SRP_JSON(hBody, 'Release')               
 | 
				
			||||||
                end else
 | 
					                end else
 | 
				
			||||||
                    HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
					                    HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
				
			||||||
 | 
					                    Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
                end
 | 
					                end
 | 
				
			||||||
            end else
 | 
					            end else
 | 
				
			||||||
                ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason')
 | 
					                ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason')
 | 
				
			||||||
@ -249,11 +299,17 @@ API scan.ID.PATCH
 | 
				
			|||||||
        end else
 | 
					        end else
 | 
				
			||||||
            Message = 'Unable to parse the JSON scan resource.'
 | 
					            Message = 'Unable to parse the JSON scan resource.'
 | 
				
			||||||
            HTTP_Services('SetResponseStatus', 400, Message)
 | 
					            HTTP_Services('SetResponseStatus', 400, Message)
 | 
				
			||||||
 | 
					            Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        Message = Error_Services('GetMessage')
 | 
					        Message = Error_Services('GetMessage')
 | 
				
			||||||
        HTTP_Services('SetResponseStatus', 404, Message)
 | 
					        HTTP_Services('SetResponseStatus', 404, Message)
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
				
			||||||
    TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
					    TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -272,6 +328,8 @@ end api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
API scan.ID.PUT
 | 
					API scan.ID.PUT
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'SCAN_ID_PUT'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Reset')
 | 
					    SRP_Stopwatch('Reset')
 | 
				
			||||||
    SRP_Stopwatch('Start', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Start', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
				
			||||||
@ -314,17 +372,25 @@ API scan.ID.PUT
 | 
				
			|||||||
            Database_Services('WriteDataRow', 'SCANS', ScanID, ScanRow, True$, False$, True$)
 | 
					            Database_Services('WriteDataRow', 'SCANS', ScanID, ScanRow, True$, False$, True$)
 | 
				
			||||||
            If Error_Services('NoError') then
 | 
					            If Error_Services('NoError') then
 | 
				
			||||||
                GoSub CreateHALItem
 | 
					                GoSub CreateHALItem
 | 
				
			||||||
 | 
					                Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
				
			||||||
            end else
 | 
					            end else
 | 
				
			||||||
                Message = Error_Services('GetMessage')
 | 
					                Message = Error_Services('GetMessage')
 | 
				
			||||||
                HTTP_Services('SetResponseStatus', 500, Message)
 | 
					                HTTP_Services('SetResponseStatus', 500, Message)
 | 
				
			||||||
 | 
					                Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
            SRP_JSON(hBody, 'Release')
 | 
					            SRP_JSON(hBody, 'Release')
 | 
				
			||||||
        end else
 | 
					        end else
 | 
				
			||||||
            HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.')
 | 
					            HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.')
 | 
				
			||||||
 | 
					            Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
					        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
				
			||||||
 | 
					        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
					    SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
				
			||||||
    TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
					    TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
				
			||||||
    LogData    = ''
 | 
					    LogData    = ''
 | 
				
			||||||
@ -339,7 +405,6 @@ API scan.ID.PUT
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
    LogData<6> = ResponseStatusCode
 | 
					    LogData<6> = ResponseStatusCode
 | 
				
			||||||
    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
					    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
end api
 | 
					end api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -378,3 +443,4 @@ CreateHALItem:
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -47,9 +47,10 @@ Declare Function    Scan_Services, Memory_Services, Database_Services, SRP_JSON,
 | 
				
			|||||||
Declare Function    QA_Services, Error_Services, Security_Services, SRP_Array, obj_WO_Mat, Memberof, Override_Log_Services
 | 
					Declare Function    QA_Services, Error_Services, Security_Services, SRP_Array, obj_WO_Mat, Memberof, Override_Log_Services
 | 
				
			||||||
Declare Function    Keyboard_Sim_Services, Environment_Services, Logging_Services, Reactor_Services, Supplement_Services
 | 
					Declare Function    Keyboard_Sim_Services, Environment_Services, Logging_Services, Reactor_Services, Supplement_Services
 | 
				
			||||||
Declare function    Test_Run_Services, Lot_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
 | 
					Declare function    Test_Run_Services, Lot_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
 | 
				
			||||||
 | 
					Declare function	GetTickCount
 | 
				
			||||||
Declare Subroutine  Scan_Services, Memory_Services, Database_Services, SRP_JSON, QA_Services, Error_Services
 | 
					Declare Subroutine  Scan_Services, Memory_Services, Database_Services, SRP_JSON, QA_Services, Error_Services
 | 
				
			||||||
Declare Subroutine  obj_WO_Mat_Log, Tool_Parms_Services, RDS_Services, Logging_Services, Supplement_Services
 | 
					Declare Subroutine  obj_WO_Mat_Log, Tool_Parms_Services, RDS_Services, Logging_Services, Supplement_Services
 | 
				
			||||||
Declare Subroutine  Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services
 | 
					Declare Subroutine  Test_Run_Services, WO_MAT_Services, Reactor_Log_Services, Schedule_Services, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Equ CRLF$		to \0D0A\
 | 
					Equ CRLF$		to \0D0A\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -61,6 +62,13 @@ Headers     = 'Logging DTM' : @FM : 'RDS Key ID' : @FM : 'User' : @FM : 'CurrSta
 | 
				
			|||||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
					objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCANSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCANSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
	Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
						Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -200,6 +208,8 @@ end service
 | 
				
			|||||||
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
 | 
					// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service GetScansRow(ScanID, ReturnJSON)
 | 
					Service GetScansRow(ScanID, ReturnJSON)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetScansRow'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	ScansRow    = ''
 | 
						ScansRow    = ''
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -214,6 +224,8 @@ Service GetScansRow(ScanID, ReturnJSON)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	Response    = ScansRow
 | 
						Response    = ScansRow
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -223,6 +235,8 @@ end service
 | 
				
			|||||||
// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
 | 
					// Returns the database row from the SCANS table for the indicated Scan ID. The default format is MultiValue.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service SetScansRow(ScanID, ScansRow)
 | 
					Service SetScansRow(ScanID, ScansRow)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'SetScansRow'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	If (ScanID NE '') AND (ScansRow NE '') then
 | 
						If (ScanID NE '') AND (ScansRow NE '') then
 | 
				
			||||||
		Database_Services('WriteDataRow', 'SCANS', ScanID, ScansRow)
 | 
							Database_Services('WriteDataRow', 'SCANS', ScanID, ScansRow)
 | 
				
			||||||
@ -230,6 +244,8 @@ Service SetScansRow(ScanID, ScansRow)
 | 
				
			|||||||
		Error_Services('Add', 'ScanID or ScansRow argument was missing in the ' : Service : ' service.')
 | 
							Error_Services('Add', 'ScanID or ScansRow argument was missing in the ' : Service : ' service.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -242,6 +258,8 @@ end service
 | 
				
			|||||||
// evaluated on a case by case basis.
 | 
					// evaluated on a case by case basis.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service ProcessScanData(ScanID, ScanJSON)
 | 
					Service ProcessScanData(ScanID, ScanJSON)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'ProcessScanData'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	If ( (ScanID NE '') AND (ScanJSON NE '') ) then
 | 
						If ( (ScanID NE '') AND (ScanJSON NE '') ) then
 | 
				
			||||||
		hScanJSON     = ''
 | 
							hScanJSON     = ''
 | 
				
			||||||
@ -1287,6 +1305,8 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
				
			|||||||
		Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
							Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1295,6 +1315,9 @@ end service
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service AcceptScan(ScanID, ScanJSON)
 | 
					Service AcceptScan(ScanID, ScanJSON)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'AcceptScan'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	If ( (ScanID NE '') and (ScanJSON NE '') ) then
 | 
						If ( (ScanID NE '') and (ScanJSON NE '') ) then
 | 
				
			||||||
		hBody         = ''
 | 
							hBody         = ''
 | 
				
			||||||
		ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON)
 | 
							ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON)
 | 
				
			||||||
@ -1649,6 +1672,8 @@ Service AcceptScan(ScanID, ScanJSON)
 | 
				
			|||||||
		Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
							Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
@ -1659,6 +1684,8 @@ end service
 | 
				
			|||||||
// HAL+JSON properties will be added to the JSON object.
 | 
					// HAL+JSON properties will be added to the JSON object.
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
					Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'ConvertMVScanToJSON'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	jsonScan    = ''
 | 
						jsonScan    = ''
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -2160,6 +2187,8 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	Response    = jsonScan
 | 
						Response    = jsonScan
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
@ -2396,9 +2425,3 @@ ClearCursors:
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -55,16 +55,24 @@ EQU NOTIFICATION_PERIOD$ TO 12
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Declare subroutine  Error_Services, Schedule_Services, Memory_Services, RList, Database_Services, Logging_Services
 | 
					Declare subroutine  Error_Services, Schedule_Services, Memory_Services, RList, Database_Services, Logging_Services
 | 
				
			||||||
Declare subroutine  Btree.Extract, Set_Status, Reduce, FSMsg, Messaging_Services, obj_Notes, Make.List
 | 
					Declare subroutine  Btree.Extract, Set_Status, Reduce, FSMsg, Messaging_Services, obj_Notes, Make.List
 | 
				
			||||||
 | 
					Declare subroutine	Mona_Services
 | 
				
			||||||
Declare function    SRP_Array, Schedule_Services, Memory_Services, Database_Services, SRP_Sort_Array, Datetime
 | 
					Declare function    SRP_Array, Schedule_Services, Memory_Services, Database_Services, SRP_Sort_Array, Datetime
 | 
				
			||||||
Declare function    Epi_Part_Services, SRP_Math, SRP_Hash, obj_Prod_Spec, Logging_Services, Environment_Services
 | 
					Declare function    Epi_Part_Services, SRP_Math, SRP_Hash, obj_Prod_Spec, Logging_Services, Environment_Services
 | 
				
			||||||
Declare function    Work_Order_Services, RTI_CreateGUID, Reactor_Services, Schedule_Services, NextKey, SRP_Datetime
 | 
					Declare function    Work_Order_Services, RTI_CreateGUID, Reactor_Services, Schedule_Services, NextKey, SRP_Datetime
 | 
				
			||||||
Declare function	SRP_Time, Lsl_Users_Services
 | 
					Declare function	SRP_Time, Lsl_Users_Services, GetTickCount
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Date            = Oconv(Date(), 'D4/')
 | 
					Date            = Oconv(Date(), 'D4/')
 | 
				
			||||||
LogFileName     = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv'
 | 
					LogFileName     = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv'
 | 
				
			||||||
Headers         = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes'
 | 
					Headers         = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes'
 | 
				
			||||||
ColumnWidths    = 20 : @FM : 30 : @FM : 150
 | 
					ColumnWidths    = 20 : @FM : 30 : @FM : 150
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SCHEDULESERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SCHEDULESERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
						Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -795,6 +803,8 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetCurrentEvent(ReactNo)
 | 
					Service GetCurrentEvent(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetCurrentEvent'
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	SchedDetKey = ''
 | 
						SchedDetKey = ''
 | 
				
			||||||
	If ReactNo NE '' then
 | 
						If ReactNo NE '' then
 | 
				
			||||||
@ -814,9 +824,14 @@ Service GetCurrentEvent(ReactNo)
 | 
				
			|||||||
		GoSub ClearCursors
 | 
							GoSub ClearCursors
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CurrentEventIsBlock(ReactNo)
 | 
					Service CurrentEventIsBlock(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CurrentEventIsBlock'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	If ReactNo NE '' then
 | 
						If ReactNo NE '' then
 | 
				
			||||||
		CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
							CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
@ -838,9 +853,15 @@ Service CurrentEventIsBlock(ReactNo)
 | 
				
			|||||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
							ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
				
			||||||
		Error_Services('Add', ErrorMsg)
 | 
							Error_Services('Add', ErrorMsg)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetNextEvent(ReactNo)
 | 
					Service GetNextEvent(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetNextEvent'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	SchedDetKey = ''
 | 
						SchedDetKey = ''
 | 
				
			||||||
	If ReactNo NE '' then
 | 
						If ReactNo NE '' then
 | 
				
			||||||
		CurrDTM  = Datetime()
 | 
							CurrDTM  = Datetime()
 | 
				
			||||||
@ -870,6 +891,9 @@ Service GetNextEvent(ReactNo)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		GoSub ClearCursors
 | 
							GoSub ClearCursors
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetEngagedEvent(ReactNo)
 | 
					Service GetEngagedEvent(ReactNo)
 | 
				
			||||||
@ -919,6 +943,9 @@ Service GetLastEngagedEvent(ReactNo)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service NextEventIsSamePsn(ReactNo)
 | 
					Service NextEventIsSamePsn(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'NextEventIsSamePsn'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	Response = False$
 | 
						Response = False$
 | 
				
			||||||
	If ReactNo NE '' then
 | 
						If ReactNo NE '' then
 | 
				
			||||||
		CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
							CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
				
			||||||
@ -962,9 +989,15 @@ Service NextEventIsSamePsn(ReactNo)
 | 
				
			|||||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
							ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
				
			||||||
		Error_Services('Add', ErrorMsg)
 | 
							Error_Services('Add', ErrorMsg)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service NextEventIsBlock(ReactNo)
 | 
					Service NextEventIsBlock(ReactNo)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'NextEventIsBlock'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	If ReactNo NE '' then
 | 
						If ReactNo NE '' then
 | 
				
			||||||
		NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo)
 | 
							NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo)
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
@ -986,6 +1019,9 @@ Service NextEventIsBlock(ReactNo)
 | 
				
			|||||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
							ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
				
			||||||
		Error_Services('Add', ErrorMsg)
 | 
							Error_Services('Add', ErrorMsg)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
@ -3561,3 +3597,4 @@ CreateScheduleChangeNotification:
 | 
				
			|||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    History     :   (Date, Initials, Notes)
 | 
					    History     :   (Date, Initials, Notes)
 | 
				
			||||||
        07/25/23    djs     Original programmer.
 | 
					        07/25/23    djs     Original programmer.
 | 
				
			||||||
 | 
					        06/04/25	djs		Added LSL note creation (and email forwarding) to notify OI_ADMIN users when invoked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
***********************************************************************************************************************/
 | 
					***********************************************************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,24 +25,58 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$insert APP_INSERTS
 | 
					$insert APP_INSERTS
 | 
				
			||||||
$insert RTI_DEBUG_COMMON
 | 
					$insert RTI_DEBUG_COMMON
 | 
				
			||||||
 | 
					$insert ENVIRON_CONSTANTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function   Environment_Services, Logging_Services
 | 
					Declare function   Environment_Services, Logging_Services, Environment_Services, GetCommandLine, Datetime
 | 
				
			||||||
Declare subroutine Logging_Services
 | 
					Declare subroutine Logging_Services, obj_Notes, Set_Env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
 | 
					Main:
 | 
				
			||||||
LogDate     = Oconv(Date(), 'D4/')
 | 
						
 | 
				
			||||||
LogTime     = Oconv(Time(), 'MTS')
 | 
						// Log event in .\LogFiles\ServiceManager\<Date> OEngine Log.csv
 | 
				
			||||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
 | 
						LogPath      = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
 | 
				
			||||||
Headers     = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
 | 
						LogDate      = Oconv(Date(), 'D4/')
 | 
				
			||||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
						LogTime      = Oconv(Time(), 'MTS')
 | 
				
			||||||
LogData     = ''
 | 
						LogFileName  = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
 | 
				
			||||||
LogData<1>  = SPStatus@
 | 
						Headers      = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM
 | 
				
			||||||
LogData<2>  = SPStatCode@
 | 
						Headers     := 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
 | 
				
			||||||
LogData<3>  = Curr_Program@
 | 
						objLog       = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
				
			||||||
LogData<4>  = CallDepth@
 | 
						LogData      = ''
 | 
				
			||||||
LogData<5>  = LineNo@
 | 
						LogData<1>   = spStatus@
 | 
				
			||||||
LogData<6>  = CallStack@
 | 
						LogData<2>   = spStatCode@
 | 
				
			||||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
 | 
						LogData<3>   = curr_Program@
 | 
				
			||||||
 | 
						LogData<4>   = callDepth@
 | 
				
			||||||
 | 
						LogData<5>   = lineNo@
 | 
				
			||||||
 | 
						LogData<6>   = callStack@
 | 
				
			||||||
 | 
						Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Send an LSL message to FI admins to alert them. This is forward to their email address if configured in
 | 
				
			||||||
 | 
						// their LSL_USERS record.
 | 
				
			||||||
 | 
						CmdLine      = GetCommandLine()
 | 
				
			||||||
 | 
						EngIndex     = Index(CmdLine, '/S=', 1)
 | 
				
			||||||
 | 
						EngNo        = CmdLine[EngIndex + 3, 'F ']
 | 
				
			||||||
 | 
						Server       = Environment_Services('GetServer')
 | 
				
			||||||
 | 
						Recipients   = ''
 | 
				
			||||||
 | 
						SentFrom     = 'SYSTEM'
 | 
				
			||||||
 | 
						Subject      = 'Service Manager Debugger Intercept Invoked'
 | 
				
			||||||
 | 
						Message      = OConv(Datetime(), 'DT2/^H')
 | 
				
			||||||
 | 
						Message<2>   = 'RevEngineHost (OEngine) ':EngNo:' encountered a runtime error on server ':Server
 | 
				
			||||||
 | 
						Message<3>   = 'Stored Procedure Status: ':spStatus@
 | 
				
			||||||
 | 
						StatCodes    = spStatCode@
 | 
				
			||||||
 | 
						Swap Char(0) with ',' in StatCodes
 | 
				
			||||||
 | 
						Swap Char(23) with '' in StatCodes
 | 
				
			||||||
 | 
						Message<4>   = 'Stored Procedure Status Code: ':StatCodes
 | 
				
			||||||
 | 
						Message<5>   = 'Current Program: ':curr_Program@
 | 
				
			||||||
 | 
						Message<6>   = 'Call Depth: ':callDepth@
 | 
				
			||||||
 | 
						Message<7>   = 'Line No: ':lineNo@
 | 
				
			||||||
 | 
						Message<8>   = 'Call Stack: ':\0D0A\:callStack@
 | 
				
			||||||
 | 
						Swap @FM with \0D0A\ in Message
 | 
				
			||||||
 | 
						Swap @VM with ',' in Message
 | 
				
			||||||
 | 
						AttachWindow = ''
 | 
				
			||||||
 | 
						AttachKey    = ''
 | 
				
			||||||
 | 
						SendToGroup  = 'OI_SYSADMIN'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
 | 
				
			||||||
 | 
						obj_Notes('Create',Parms)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Return
 | 
					Return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -27,19 +27,30 @@ Function Service_Services(@Service, @Params)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$insert LOGICAL
 | 
					$Insert APP_INSERTS
 | 
				
			||||||
$insert SERVICE_SETUP
 | 
					$Insert SERVICE_SETUP
 | 
				
			||||||
$insert SERVICES_EQUATES
 | 
					$Insert SERVICES_EQUATES
 | 
				
			||||||
$insert RLIST_EQUATES
 | 
					$Insert RLIST_EQUATES
 | 
				
			||||||
$insert SQL_REQUESTS_EQUATES
 | 
					$Insert SQL_REQUESTS_EQUATES
 | 
				
			||||||
$Insert PROC_QUEUE_EQUATES
 | 
					$Insert PROC_QUEUE_EQUATES
 | 
				
			||||||
 | 
					$Insert PROC_QUEUE_FAILED_EQUATES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Equ Comma$ to ','
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@
 | 
					Common /ServiceServices/ Unused1@, Unused2@, Unused3@, Unused4@, Unused5@, Unused6@, Unused7@, Unused8@, Unused9@, Unused10@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function    Service_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services, Datetime
 | 
					Declare function    Service_Services, Memory_Services, SRP_List, SRP_FastArray, SRP_Array, Database_Services, Datetime
 | 
				
			||||||
Declare Function    GetTickCount, SRP_Decode, RTI_CREATEGUID
 | 
					Declare function    GetTickCount, SRP_Decode, RTI_CreateGuid, UCase, Environment_services, Logging_Services
 | 
				
			||||||
Declare subroutine  Service_Services, Memory_Services, SRP_List, SRP_FastArray, RList, Set_Status, Database_Services
 | 
					Declare subroutine  Service_Services, Memory_Services, SRP_List, SRP_FastArray, RList, Set_Status, Database_Services
 | 
				
			||||||
Declare Subroutine  Yield, WinYield, Sleepery, Btree.Extract
 | 
					Declare Subroutine  Yield, WinYield, Sleepery, Btree.Extract, Logging_Services, obj_Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\ProcQueue'
 | 
				
			||||||
 | 
					LogDate     = Oconv(Date(), 'D4/')
 | 
				
			||||||
 | 
					LogTime     = Oconv(Time(), 'MTS')
 | 
				
			||||||
 | 
					LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Procedure Queue Log.csv'
 | 
				
			||||||
 | 
					Headers     = 'Logging DTM' : @FM : 'Machine' : @FM : 'RequestKeyId' : @FM : 'Procedure' : @FM : 'Params' : @FM : 'Result' : @FM : 'Error Message'
 | 
				
			||||||
 | 
					objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
    Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
					    Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
				
			||||||
@ -165,18 +176,22 @@ Service ProcessProcedureQueue()
 | 
				
			|||||||
            ReadNext RequestKeyID else EOF = True$
 | 
					            ReadNext RequestKeyID else EOF = True$
 | 
				
			||||||
        Until EOF or Done
 | 
					        Until EOF or Done
 | 
				
			||||||
            Lock hProcQueue, RequestKeyID then
 | 
					            Lock hProcQueue, RequestKeyID then
 | 
				
			||||||
 | 
					            	DeleteRequest = True$
 | 
				
			||||||
 | 
					            	Server        = Environment_Services('GetServer')
 | 
				
			||||||
            	Done          = True$
 | 
					            	Done          = True$
 | 
				
			||||||
                Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)          
 | 
					                Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)          
 | 
				
			||||||
                RequestRow    = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
 | 
					                RequestRow    = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
 | 
				
			||||||
                If RequestRow NE '' then                   
 | 
					                If RequestRow NE '' then                   
 | 
				
			||||||
                    Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
 | 
					                    Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
 | 
				
			||||||
 | 
					                    Procedure = UCase(Procedure)
 | 
				
			||||||
                    Params    = RequestRow<PROC_QUEUE.PARAMS$>
 | 
					                    Params    = RequestRow<PROC_QUEUE.PARAMS$>
 | 
				
			||||||
                    If Procedure NE '' then
 | 
					                    If Procedure NE '' then
 | 
				
			||||||
                        Dim ProcParams(11)
 | 
					                        Dim ProcParams(12)
 | 
				
			||||||
                        For each Param in Params using @VM setting pPos
 | 
					                        For each Param in Params using @VM setting pPos
 | 
				
			||||||
                            ProcParams(pPos) = Param
 | 
					                            ProcParams(pPos) = Param
 | 
				
			||||||
                        Next Param
 | 
					                        Next Param
 | 
				
			||||||
                        NumArguments = DCount(Params, @VM)
 | 
					                        NumArguments = DCount(Params, @VM)
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
                        Begin Case
 | 
					                        Begin Case
 | 
				
			||||||
                            Case NumArguments EQ 0  ; Call @Procedure()
 | 
					                            Case NumArguments EQ 0  ; Call @Procedure()
 | 
				
			||||||
                            Case NumArguments EQ 1  ; Call @Procedure(ProcParams(1))
 | 
					                            Case NumArguments EQ 1  ; Call @Procedure(ProcParams(1))
 | 
				
			||||||
@ -194,17 +209,58 @@ Service ProcessProcedureQueue()
 | 
				
			|||||||
                            	Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.')
 | 
					                            	Error_Services('Add', 'Error in ':Service:' service. More than 11 arguments are not currently supported.')
 | 
				
			||||||
                        End Case
 | 
					                        End Case
 | 
				
			||||||
                    end
 | 
					                    end
 | 
				
			||||||
                    If Error_Services('NoError') then
 | 
					                    
 | 
				
			||||||
						Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
 | 
					                    Swap @VM with ',' in Params
 | 
				
			||||||
 | 
					                    LogData    = LoggingDTM
 | 
				
			||||||
 | 
					                    LogData<2> = Server
 | 
				
			||||||
 | 
					                    LogData<3> = RequestKeyId
 | 
				
			||||||
 | 
					                    LogData<4> = Procedure
 | 
				
			||||||
 | 
					                    LogData<5> = Params
 | 
				
			||||||
 | 
					                    ErrCode    = ''
 | 
				
			||||||
 | 
					                    If ( Get_Status(ErrCode) or Error_Services('HasError') ) then
 | 
				
			||||||
 | 
					                    	NumAttempts  = RequestRow<PROC_QUEUE.NUM_ATTEMPTS$> + 1
 | 
				
			||||||
 | 
					                    	ErrorMessage = Error_Services('GetMessage')
 | 
				
			||||||
 | 
					                    	If NumAttempts LT 3 then
 | 
				
			||||||
 | 
					                    		DeleteRequest                            = False$
 | 
				
			||||||
 | 
					                    		RequestRow<PROC_QUEUE.NUM_ATTEMPTS$>     = NumAttempts
 | 
				
			||||||
 | 
												RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = Datetime()
 | 
				
			||||||
 | 
												RequestRow<PROC_QUEUE.ERROR$>            = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
 | 
				
			||||||
 | 
												Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyId, RequestRow, True$, False$, False$)
 | 
				
			||||||
						end else
 | 
											end else
 | 
				
			||||||
						RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
 | 
												// Notify OI_SYSADMIN group
 | 
				
			||||||
						RequestRow<PROC_QUEUE.ERROR$>            = Error_Services('GetMessage')
 | 
												Recipients                           = ''
 | 
				
			||||||
						Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) ; // This call will release the lock
 | 
												SentFrom                             = 'SYSTEM'
 | 
				
			||||||
 | 
												Subject                              = 'Background Procedure Queue Error'
 | 
				
			||||||
 | 
												Message                              = OConv(Datetime(), 'DT2/^H')
 | 
				
			||||||
 | 
												Message<2>                           = 'Error on server ':Server
 | 
				
			||||||
 | 
												Message<3>                           = 'Stored Procedure: ':Procedure
 | 
				
			||||||
 | 
												StatCodes                            = 'Parameters: ':Params
 | 
				
			||||||
 | 
												Message<4>                           = 'Error_Services error message: ':ErrorMessage
 | 
				
			||||||
 | 
												Message<5>                           = 'Get_Status error code: ':ErrCode
 | 
				
			||||||
 | 
												Swap @FM with \0D0A\ in Message
 | 
				
			||||||
 | 
												AttachWindow                         = ''
 | 
				
			||||||
 | 
												AttachKey                            = ''
 | 
				
			||||||
 | 
												SendToGroup                          = 'OI_SYSADMIN'
 | 
				
			||||||
 | 
												Parms                                = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
 | 
				
			||||||
 | 
												obj_Notes('Create',Parms)
 | 
				
			||||||
 | 
												
 | 
				
			||||||
 | 
												// Move request to PROC_QUEUE_FAILED
 | 
				
			||||||
 | 
					                    		RequestRow<PROC_QUEUE.NUM_ATTEMPTS$>     = NumAttempts
 | 
				
			||||||
 | 
												RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = Datetime()
 | 
				
			||||||
 | 
												RequestRow<PROC_QUEUE.ERROR$>            = 'Error_Services error message: ':ErrorMessage:'Get_Status error code: ':ErrCode							
 | 
				
			||||||
 | 
												Database_Services('WriteDataRow', 'PROC_QUEUE_FAILED', RequestKeyId, RequestRow, True$, False$, False$)
 | 
				
			||||||
						end
 | 
											end
 | 
				
			||||||
 | 
											LogData<6> = 'Failed'
 | 
				
			||||||
 | 
											LogData<7> = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
 | 
				
			||||||
					end else
 | 
										end else
 | 
				
			||||||
                	// Empty request, so delete it from the queue
 | 
											LogData<6> = 'Success'
 | 
				
			||||||
                	Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
 | 
					 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
 | 
										Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					                If DeleteRequest then 
 | 
				
			||||||
 | 
										Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
					                Unlock hProcQueue, RequestKeyID else Null
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
        Repeat
 | 
					        Repeat
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@ -217,7 +273,6 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
 | 
				
			|||||||
    If Critical EQ '' then Critical = True$
 | 
					    If Critical EQ '' then Critical = True$
 | 
				
			||||||
    PostToQueue = True$
 | 
					    PostToQueue = True$
 | 
				
			||||||
    If (ProcedureName NE '') then
 | 
					    If (ProcedureName NE '') then
 | 
				
			||||||
    	If (Params NE '') then
 | 
					 | 
				
			||||||
		If Not(Critical) then
 | 
							If Not(Critical) then
 | 
				
			||||||
			// Check if there is already a matching request in the queue before posting another one.
 | 
								// Check if there is already a matching request in the queue before posting another one.
 | 
				
			||||||
			Query = 'PROC_NAME':@VM:ProcedureName:@FM
 | 
								Query = 'PROC_NAME':@VM:ProcedureName:@FM
 | 
				
			||||||
@ -244,9 +299,6 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
 | 
				
			|||||||
			RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
 | 
								RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
 | 
				
			||||||
			Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
 | 
								Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
    	end else
 | 
					 | 
				
			||||||
    		Error_Services('Add', 'Error in ':Service:' service. Null Params passed in.')
 | 
					 | 
				
			||||||
    	end
 | 
					 | 
				
			||||||
    end else
 | 
					    end else
 | 
				
			||||||
        Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
 | 
					        Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@ -254,8 +306,98 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
 | 
				
			|||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service CleanFailedProcQueue(DaysToRetain)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
				
			||||||
 | 
						Lock hSysLists, ServiceKeyID then	
 | 
				
			||||||
 | 
							LogPath                = Environment_Services('GetApplicationRootPath') : '\LogFiles\ProcQueue'
 | 
				
			||||||
 | 
							LogDate                = Oconv(Date(), 'D4/')
 | 
				
			||||||
 | 
							LogTime                = Oconv(Time(), 'MTS')
 | 
				
			||||||
 | 
							LogFileName            = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' CleanFailedProcQueue Log.csv'
 | 
				
			||||||
 | 
							Headers                = 'Logging DTM' : @FM : 'Machine' : @FM : 'RequestKeyId' : @FM : 'Procedure' : @FM : 'Params'
 | 
				
			||||||
 | 
							Headers               := @FM : 'Result' : @FM : 'Error Message'
 | 
				
			||||||
 | 
							objFailedProcQueueLog  = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
				
			||||||
 | 
							LoggingDTM             = LogDate : ' ' : LogTime   ; // Logging DTM	
 | 
				
			||||||
 | 
							Server                 = Environment_Services('GetServer')
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							LogData    = ''
 | 
				
			||||||
 | 
							LogData<1> = LoggingDtm
 | 
				
			||||||
 | 
							LogData<2> = Server
 | 
				
			||||||
 | 
							LogData<6> = 'Begin CleanFailedProcQueue'
 | 
				
			||||||
 | 
							Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							ErrorMsg    = ''
 | 
				
			||||||
 | 
							If (DaysToRetain NE '') then
 | 
				
			||||||
 | 
								If Num(DaysToRetain) then
 | 
				
			||||||
 | 
									Open 'PROC_QUEUE_FAILED' to hTable then
 | 
				
			||||||
 | 
										Cutoff = Datetime() - DaysToRetain
 | 
				
			||||||
 | 
										Select hTable
 | 
				
			||||||
 | 
										EOF    = False$
 | 
				
			||||||
 | 
										Loop
 | 
				
			||||||
 | 
											Readnext Key else EOF = True$
 | 
				
			||||||
 | 
										Until EOF
 | 
				
			||||||
 | 
											Read Rec from hTable, Key then
 | 
				
			||||||
 | 
												EntryDtm = Rec<PROC_QUEUE_FAILED.ENTRY_DTM$>
 | 
				
			||||||
 | 
												If (EntryDtm LT Cutoff) then
 | 
				
			||||||
 | 
													Delete hTable, Key then
 | 
				
			||||||
 | 
														LogData<1>       = LoggingDtm
 | 
				
			||||||
 | 
														LogData<2>       = Server
 | 
				
			||||||
 | 
														LogData<3>       = Key
 | 
				
			||||||
 | 
														LogData<4>       = Rec<PROC_QUEUE_FAILED.PROC_NAME$>
 | 
				
			||||||
 | 
														ProcFailedParams = Rec<PROC_QUEUE_FAILED.PARAMS$>
 | 
				
			||||||
 | 
														Convert @VM to '|' in ProcFailedParams
 | 
				
			||||||
 | 
														LogData<5>       = ProcFailedParams
 | 
				
			||||||
 | 
														LogData<6>       = 'Removed PROC_QUEUE_FAILED record.'
 | 
				
			||||||
 | 
														LogData<7>       = Rec<PROC_QUEUE_FAILED.ERROR$>
 | 
				
			||||||
 | 
														Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)								
 | 
				
			||||||
 | 
													end else
 | 
				
			||||||
 | 
														ErrorMsg = 'Error in ':Service:' service. Error deleting PROC_QUEUE_FAILED record ':Key:'.'
 | 
				
			||||||
 | 
													end
 | 
				
			||||||
 | 
												end else
 | 
				
			||||||
 | 
													LogData<1>       = LoggingDtm
 | 
				
			||||||
 | 
													LogData<2>       = Server
 | 
				
			||||||
 | 
													LogData<3>       = Key
 | 
				
			||||||
 | 
													LogData<4>       = Rec<PROC_QUEUE_FAILED.PROC_NAME$>
 | 
				
			||||||
 | 
													ProcFailedParams = Rec<PROC_QUEUE_FAILED.PARAMS$>
 | 
				
			||||||
 | 
													Convert @VM to '|' in ProcFailedParams
 | 
				
			||||||
 | 
													LogData<5>       = ProcFailedParams
 | 
				
			||||||
 | 
													LogData<6>       = 'Retaining PROC_QUEUE_FAILED record.'
 | 
				
			||||||
 | 
													LogData<7>       = Rec<PROC_QUEUE_FAILED.ERROR$>
 | 
				
			||||||
 | 
													Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)								
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
 | 
											end else
 | 
				
			||||||
 | 
												ErrorMsg = 'Error in ':Service:' service. Error reading PROC_QUEUE_FAILED record ':Key:'.'
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										Repeat
 | 
				
			||||||
 | 
									end else
 | 
				
			||||||
 | 
										ErrorMsg = 'Error in ':Service:' service. Error opening PROC_QUEUE_FAILED table.'
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end else
 | 
				
			||||||
 | 
									ErrorMsg = 'Error in ':Service:' service. DaysToRetain must be a number.'
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end else
 | 
				
			||||||
 | 
								ErrorMsg = 'Error in ':Service:' service. Null DaysToRetain value passed in.'
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							If ErrorMsg NE '' then
 | 
				
			||||||
 | 
								LogData<1> = LoggingDtm
 | 
				
			||||||
 | 
								LogData<2> = Server
 | 
				
			||||||
 | 
								LogData<6> = ErrorMsg
 | 
				
			||||||
 | 
								Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)			
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							LogData<1> = LoggingDtm
 | 
				
			||||||
 | 
							LogData<2> = Server
 | 
				
			||||||
 | 
							LogData<6> = 'End CleanFailedProcQueue'
 | 
				
			||||||
 | 
							Logging_Services('AppendLog', objFailedProcQueueLog, LogData, @RM, @FM)
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							Unlock hSysLists, ServiceKeyID else Null
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
/// Internal GoSubs
 | 
					/// Internal GoSubs
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -63,12 +63,20 @@ Equ COL$TOOL_ID         to 10
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Declare function obj_Prod_Spec, RDS_Services, Error_Services, Signature_Services, Memory_Services, obj_RDS_Test
 | 
					Declare function obj_Prod_Spec, RDS_Services, Error_Services, Signature_Services, Memory_Services, obj_RDS_Test
 | 
				
			||||||
Declare function Database_Services, obj_WO_Mat, Dialog_Box, MemberOf, Msg, QA_Services, Datetime, Supplement_Services
 | 
					Declare function Database_Services, obj_WO_Mat, Dialog_Box, MemberOf, Msg, QA_Services, Datetime, Supplement_Services
 | 
				
			||||||
 | 
					Declare function Environment_Services, GetTickCount
 | 
				
			||||||
Declare subroutine Error_Services, Popup, Memory_Services, SRP_Stopwatch, Set_Status, Database_Services, obj_WO_Mat
 | 
					Declare subroutine Error_Services, Popup, Memory_Services, SRP_Stopwatch, Set_Status, Database_Services, obj_WO_Mat
 | 
				
			||||||
Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg
 | 
					Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PSNKey     = ServiceKeyID
 | 
					PSNKey     = ServiceKeyID
 | 
				
			||||||
ReactorKey = ServiceKeyID
 | 
					ReactorKey = ServiceKeyID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SIGNATURESERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SIGNATURESERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService
 | 
					GoToService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Return Response or ""
 | 
					Return Response or ""
 | 
				
			||||||
@ -135,6 +143,8 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
 | 
					Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetSigProfile'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    If UseCaching EQ '' then UseCaching = True$
 | 
					    If UseCaching EQ '' then UseCaching = True$
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -175,6 +185,8 @@ Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
 | 
				
			|||||||
    SigDTMs = OCONV(SigDTMs,'DT4/^S')
 | 
					    SigDTMs = OCONV(SigDTMs,'DT4/^S')
 | 
				
			||||||
    Response = SigProfile:@FM:Signatures:@FM:SigDTMs 
 | 
					    Response = SigProfile:@FM:Signatures:@FM:SigDTMs 
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -211,6 +223,9 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
 | 
					Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CheckSigOrder'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    If UseCaching EQ '' then UseCachine = True$
 | 
					    If UseCaching EQ '' then UseCachine = True$
 | 
				
			||||||
    Response    = False$
 | 
					    Response    = False$
 | 
				
			||||||
    If RDSNo NE '' then
 | 
					    If RDSNo NE '' then
 | 
				
			||||||
@ -264,6 +279,8 @@ Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
 | 
				
			|||||||
        Response = True$
 | 
					        Response = True$
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
End Service
 | 
					End Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2010,8 +2027,6 @@ Service QASigReady(RDSNo)
 | 
				
			|||||||
    * Verify Unload Stage QA Metrology Tests *
 | 
					    * Verify Unload Stage QA Metrology Tests *
 | 
				
			||||||
    ******************************************
 | 
					    ******************************************
 | 
				
			||||||
    If ErrorMessage EQ '' then
 | 
					    If ErrorMessage EQ '' then
 | 
				
			||||||
        DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
					 | 
				
			||||||
        If (DevelopmentFlag EQ True$) then
 | 
					 | 
				
			||||||
		WOMatQAKey = WOMatKey
 | 
							WOMatQAKey = WOMatKey
 | 
				
			||||||
		WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
							WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
				
			||||||
		OutOfSpec  = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
							OutOfSpec  = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
				
			||||||
@ -2024,7 +2039,6 @@ Service QASigReady(RDSNo)
 | 
				
			|||||||
			Next FailReason
 | 
								Next FailReason
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    ************************************************************************
 | 
					    ************************************************************************
 | 
				
			||||||
    * Prompt user to validate the Process Specification Stage Instructions *
 | 
					    * Prompt user to validate the Process Specification Stage Instructions *
 | 
				
			||||||
@ -2844,4 +2858,3 @@ GetMostRecentSig:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -56,9 +56,16 @@ $Insert NOTIFICATION_EQUATES
 | 
				
			|||||||
Equ COMMA$ to ','
 | 
					Equ COMMA$ to ','
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function   Database_Services, Supplement_Services, Rti_Createguid, SRP_Array, Datetime, Signature_Services
 | 
					Declare function   Database_Services, Supplement_Services, Rti_Createguid, SRP_Array, Datetime, Signature_Services
 | 
				
			||||||
Declare function   Environment_Services, Logging_Services, Select_Into
 | 
					Declare function   Environment_Services, Logging_Services, Select_Into, GetTickCount
 | 
				
			||||||
Declare subroutine Database_Services, Rds_Services, Supplement_Services, Logging_Services, Set_Status, SRP_Stopwatch
 | 
					Declare subroutine Database_Services, Rds_Services, Supplement_Services, Logging_Services, Set_Status, SRP_Stopwatch
 | 
				
			||||||
Declare subroutine Btree.Extract, obj_Notes
 | 
					Declare subroutine Btree.Extract, obj_Notes, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_SUPPLEMENTSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SUPPLEMENTSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
    Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
					    Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
				
			||||||
@ -408,6 +415,8 @@ end service
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service AcknowledgeSupplement(SupplID, EntryUser)
 | 
					Service AcknowledgeSupplement(SupplID, EntryUser)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'AcknowledgeSupplement'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    If ( (SupplID NE '') and (EntryUser NE '') ) then
 | 
					    If ( (SupplID NE '') and (EntryUser NE '') ) then
 | 
				
			||||||
        OldRec = Xlate('SUPPLEMENTS', SupplID, '', 'X', '')
 | 
					        OldRec = Xlate('SUPPLEMENTS', SupplID, '', 'X', '')
 | 
				
			||||||
@ -433,6 +442,8 @@ Service AcknowledgeSupplement(SupplID, EntryUser)
 | 
				
			|||||||
        Error_Services('Add', 'SupplID or EntryUser was missing in the ' : Service : ' service.')
 | 
					        Error_Services('Add', 'SupplID or EntryUser was missing in the ' : Service : ' service.')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -447,6 +458,8 @@ end service
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
 | 
					Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'UnacknowledgedSupplementCheck'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    UnackList = ''
 | 
					    UnackList = ''
 | 
				
			||||||
    Response  = False$
 | 
					    Response  = False$
 | 
				
			||||||
@ -482,6 +495,8 @@ Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    If UnackList NE '' then Response = UnackList
 | 
					    If UnackList NE '' then Response = UnackList
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -496,6 +511,8 @@ end service
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//----------------------------------------------------------------------------------------------------------------------
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
 | 
					Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'LogSupplementChange'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then
 | 
					    If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then
 | 
				
			||||||
        SupplementText = SupplementRec<SUPPLEMENTS_SUPPL_TEXT$>
 | 
					        SupplementText = SupplementRec<SUPPLEMENTS_SUPPL_TEXT$>
 | 
				
			||||||
@ -513,6 +530,8 @@ Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
 | 
				
			|||||||
        Error_Services('Add', 'LotType, LotID, or Stage was missing in the ' :  Service : ' service.')
 | 
					        Error_Services('Add', 'LotType, LotID, or Stage was missing in the ' :  Service : ' service.')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -613,3 +632,4 @@ Service SendNotifications(RDSList, EditEvent, Instructions, EntryUser)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -10,9 +10,10 @@ $Insert TEST_RUN_OBJ_EQUATES
 | 
				
			|||||||
$Insert LOT_EQUATES
 | 
					$Insert LOT_EQUATES
 | 
				
			||||||
$Insert LOT_OPERATION_EQUATES
 | 
					$Insert LOT_OPERATION_EQUATES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services
 | 
					Declare function Nextkey, Error_Services, Environment_Services, OConv, Logging_Services, SRP_Hashtable, Lot_Services, GetTickCount
 | 
				
			||||||
Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json, MemberOf
 | 
					Declare function SRP_Datetime, Database_Services, Test_Run_Services, File_Services, Status, delete, Insert, Datetime, SRP_Json, MemberOf
 | 
				
			||||||
Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json
 | 
					Declare subroutine Database_Services, Btree.Extract, Error_Services, Logging_Services, Rlist, Test_Run_Services, Lot_Services, SRP_Json
 | 
				
			||||||
 | 
					Declare subroutine Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
 | 
					LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\TEST_RUN_SERVICES\TestWaferProduct'
 | 
				
			||||||
LogDate     = Oconv(Date(), 'D4/')
 | 
					LogDate     = Oconv(Date(), 'D4/')
 | 
				
			||||||
@ -30,6 +31,13 @@ objLogTR    = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, He
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_TESTRUNSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_TESTRUNSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService
 | 
					GoToService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Return Response or ""
 | 
					Return Response or ""
 | 
				
			||||||
@ -280,6 +288,9 @@ Service UpdateTWProdSortOrder(TWProdKey, NewOrder)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetAllTestRunTypes()
 | 
					Service GetAllTestRunTypes()
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetAllTestRunTypes'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    keylist = ''
 | 
					    keylist = ''
 | 
				
			||||||
    rtList  = ''
 | 
					    rtList  = ''
 | 
				
			||||||
    RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
 | 
					    RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
 | 
				
			||||||
@ -297,6 +308,9 @@ Service GetAllTestRunTypes()
 | 
				
			|||||||
        end
 | 
					        end
 | 
				
			||||||
    Next ProdKey
 | 
					    Next ProdKey
 | 
				
			||||||
    Response = rtList
 | 
					    Response = rtList
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetTestWaferLots(ShowOnlyOpenLots)
 | 
					Service GetTestWaferLots(ShowOnlyOpenLots)
 | 
				
			||||||
@ -318,6 +332,9 @@ Service GetTestWaferLots(ShowOnlyOpenLots)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
 | 
					Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CreateTestRunRecord'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    TWRunKey     = ''
 | 
					    TWRunKey     = ''
 | 
				
			||||||
    Response     = ''
 | 
					    Response     = ''
 | 
				
			||||||
    ErrorMessage = ''
 | 
					    ErrorMessage = ''
 | 
				
			||||||
@ -490,9 +507,15 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
 | 
				
			|||||||
        Error_Services('Add', ErrorMessage)
 | 
					        Error_Services('Add', ErrorMessage)
 | 
				
			||||||
        Response      = ''
 | 
					        Response      = ''
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username)
 | 
					Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CreateTestRunWaferRecord'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    ErrorMessage = ''
 | 
					    ErrorMessage = ''
 | 
				
			||||||
    If TestRunID NE '' AND TWPartID NE '' then
 | 
					    If TestRunID NE '' AND TWPartID NE '' then
 | 
				
			||||||
        If RowExists('TEST_RUN', TestRunID) then
 | 
					        If RowExists('TEST_RUN', TestRunID) then
 | 
				
			||||||
@ -537,6 +560,9 @@ Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId
 | 
				
			|||||||
        Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
 | 
					        Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
 | 
				
			||||||
        Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage)
 | 
					        Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service UseTWFromLot(LotId, UsageQty, Username)
 | 
					Service UseTWFromLot(LotId, UsageQty, Username)
 | 
				
			||||||
@ -706,6 +732,9 @@ Service GetTestRunKeysByPSN(PSNo)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetTestRunKeysByRDS(RDSNo)
 | 
					Service GetTestRunKeysByRDS(RDSNo)
 | 
				
			||||||
 | 
					    StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'GetTestRunKeysByRDS'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    table = "TEST_RUN"
 | 
					    table = "TEST_RUN"
 | 
				
			||||||
    Open "DICT ":table To @DICT Else
 | 
					    Open "DICT ":table To @DICT Else
 | 
				
			||||||
        Error_Services('Add', 'Error opening TEST_RUN dictionary')
 | 
					        Error_Services('Add', 'Error opening TEST_RUN dictionary')
 | 
				
			||||||
@ -718,6 +747,9 @@ Service GetTestRunKeysByRDS(RDSNo)
 | 
				
			|||||||
        Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
 | 
					        Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
 | 
				
			||||||
        Response = keylist
 | 
					        Response = keylist
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service GetTestRunWaferByID(TRWaferID)
 | 
					Service GetTestRunWaferByID(TRWaferID)
 | 
				
			||||||
@ -799,3 +831,4 @@ end service
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										309
									
								
								LSL2/STPROC/WAFERCOUNTER_API.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										309
									
								
								LSL2/STPROC/WAFERCOUNTER_API.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,309 @@
 | 
				
			|||||||
 | 
					Function Wafercounter_API(@API)
 | 
				
			||||||
 | 
					/***********************************************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | 
				
			||||||
 | 
					    permission from SRP Computer Solutions, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Name        :   Wafercounter_API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Description :   API logic for the Wafercounter resource.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Notes       :   All web APIs should include the API_SETUP insert. This will provide several useful variables:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | 
				
			||||||
 | 
					                        APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | 
				
			||||||
 | 
					                        FullEndpointURL         - The URL submitted by the client, including query params.
 | 
				
			||||||
 | 
					                        FullEndpointURLNoQuery  - The URL submitted by the client, excluding query params.
 | 
				
			||||||
 | 
					                        EndpointSegment         - The URL endpoint segment.
 | 
				
			||||||
 | 
					                        ParentURL               - The URL path preceeding the current endpoint.
 | 
				
			||||||
 | 
					                        CurrentAPI              - The name of this stored procedure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Parameters  :
 | 
				
			||||||
 | 
					        API             [in] -- Web API to process. Format is [APIPattern].[HTTPMethod]:
 | 
				
			||||||
 | 
					                                    - APIPattern must follow this structure Wafercounter[.ID.[<Property>]]
 | 
				
			||||||
 | 
					                                    - HTTPMethod can be any valid HTTP method, e.g., GET, POST, PUT, DELETE, etc.
 | 
				
			||||||
 | 
					                                Examples:
 | 
				
			||||||
 | 
					                                    - Wafercounter.POST
 | 
				
			||||||
 | 
					                                    - Wafercounter.ID.PUT
 | 
				
			||||||
 | 
					                                    - Wafercounter.ID.firstName.GET
 | 
				
			||||||
 | 
					        Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | 
				
			||||||
 | 
					                                services do not rely upon anything being returned in the response. This is what the
 | 
				
			||||||
 | 
					                                various services like SetResponseBody and SetResponseStatus services are for. A response
 | 
				
			||||||
 | 
					                                value is only helpful if the developers want to use it for debug purposes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    History     :   (Date, Initials, Notes)
 | 
				
			||||||
 | 
					        06/04/25    xxx     Original programmer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					***********************************************************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Declare function OI_Wizard_Services, Wafer_Counter_Services, Database_Services, Datetime, Wo_Mat_Services
 | 
				
			||||||
 | 
					Declare function Logging_Services, Environment_Services
 | 
				
			||||||
 | 
					Declare subroutine Logging_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$insert APP_INSERTS
 | 
				
			||||||
 | 
					$insert API_SETUP
 | 
				
			||||||
 | 
					$insert HTTP_INSERTS
 | 
				
			||||||
 | 
					$insert WAFER_COUNTER_EQUATES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LogPath      = Environment_Services('GetApplicationRootPath') : '\LogFiles\API\WaferCounter';
 | 
				
			||||||
 | 
					LogDate      = Oconv(Date(), 'D4/')
 | 
				
			||||||
 | 
					LogTime      = Oconv(Time(), 'MTS')
 | 
				
			||||||
 | 
					LoggingDTM   = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LogFileName      = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' WaferCounter.csv'
 | 
				
			||||||
 | 
					Headers          = 'Logging DTM' : @FM : 'User' : @FM : 'OI Wizard ID' : @FM : 'Message'
 | 
				
			||||||
 | 
					objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GoToAPI else
 | 
				
			||||||
 | 
					    // The specific resource endpoint doesn't have a API handler yet.
 | 
				
			||||||
 | 
					    LogData    = ''
 | 
				
			||||||
 | 
					    LogData<1> = LoggingDTM;//Defined at entry of subroutine
 | 
				
			||||||
 | 
					    LogData<2> = ''
 | 
				
			||||||
 | 
					    LogData<3> = ''
 | 
				
			||||||
 | 
					    LogData<4> = 'Web API not found.'
 | 
				
			||||||
 | 
					    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    HTTP_Services('SetResponseStatus', 204, 'This is a valid endpoint but a web API handler has not yet been created.')
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Return Response OR ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Endpoint Handlers
 | 
				
			||||||
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					API wafercounter.startnewwafercount.POST
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ErrorMessage = ''
 | 
				
			||||||
 | 
					    ResponseCode = ''
 | 
				
			||||||
 | 
					    ResponseMessage = ''
 | 
				
			||||||
 | 
					    Body = ''
 | 
				
			||||||
 | 
					    OIWizardID = ''
 | 
				
			||||||
 | 
					    UserId = ''
 | 
				
			||||||
 | 
					    CassId = ''
 | 
				
			||||||
 | 
					    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
				
			||||||
 | 
					    For each Cookie in Cookies using ';'
 | 
				
			||||||
 | 
					        Key = Field(Cookie, '=', 1)
 | 
				
			||||||
 | 
					        If Key EQ 'sessionID' then
 | 
				
			||||||
 | 
					            OIWizardID = Field(Cookie, '=', 2)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    Next Cookie
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
				
			||||||
 | 
					    CassBarcodeData = ''
 | 
				
			||||||
 | 
					    UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
 | 
				
			||||||
 | 
					    StatusCode  = ''
 | 
				
			||||||
 | 
					    Body        = HTTP_Services('GetHTTPPostString', True$)
 | 
				
			||||||
 | 
					    DecodedJSON = HTTP_Services('DecodePercentString', Body)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Log Entry into API -
 | 
				
			||||||
 | 
					    LogData    = ''
 | 
				
			||||||
 | 
					    LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					    LogData<2> = UserId
 | 
				
			||||||
 | 
					    LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					    LogData<4> = 'New wafer counter transaction started.'
 | 
				
			||||||
 | 
					    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If SRP_JSON(objBody, 'Parse', Body) EQ '' then
 | 
				
			||||||
 | 
					        CassBarcodeData      = SRP_JSON(objBody, 'GetValue', 'CassBarcodeData')
 | 
				
			||||||
 | 
					        If CassBarcodeData NE '' then
 | 
				
			||||||
 | 
					            CassData = Wafer_Counter_Services('ProcessCass2DBarcode', CassBarcodeData)
 | 
				
			||||||
 | 
					            CassId = CassData<1,1>
 | 
				
			||||||
 | 
					            ExpectedWfrQty = CassData<1,2>
 | 
				
			||||||
 | 
					            CassType = CassData<1,3>
 | 
				
			||||||
 | 
					            WoMatKey = ''
 | 
				
			||||||
 | 
					            Begin Case
 | 
				
			||||||
 | 
					                Case CassType EQ 'RDS'
 | 
				
			||||||
 | 
					                    WONo = XLATE('RDS', CassId, 'WO', 'X')
 | 
				
			||||||
 | 
					                    CassNo = XLATE('RDS', CassId, 'CASS_NO', 'X')
 | 
				
			||||||
 | 
					                    WoMatKey = WONo : '*' : CassNo
 | 
				
			||||||
 | 
					                Case CassType EQ 'WM_OUT' OR CassType EQ 'WM_IN'
 | 
				
			||||||
 | 
					                    swap '.' with '*' in CassId
 | 
				
			||||||
 | 
					                    WONo = Field(CassId, '*', 1)
 | 
				
			||||||
 | 
					                    CassNo = Field(CassId, '*', 3)
 | 
				
			||||||
 | 
					                    WoMatKey = WONo : '*' : CassNo
 | 
				
			||||||
 | 
					            End Case
 | 
				
			||||||
 | 
					            ExpectedWfrMap = Wo_Mat_Services('GetWaferMap', WoMatKey)
 | 
				
			||||||
 | 
					            ExpectedCassetteArray = ''
 | 
				
			||||||
 | 
					            for i = 25 to 1 step -1
 | 
				
			||||||
 | 
					                    Slot = i
 | 
				
			||||||
 | 
					                    WaferPresent = ExpectedWfrMap<1, i>
 | 
				
			||||||
 | 
					                    ExpectedCassetteArray<-1, 1> = Slot : @VM : WaferPresent
 | 
				
			||||||
 | 
					            Next i
 | 
				
			||||||
 | 
					            If Error_Services('NoError') then
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'CassId', CassId, 'String')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'CassType', CassType, 'String')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'ExpectedQty', ExpectedWfrQty, 'Number')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'ScanDtm', OConv(Datetime(), 'DT4/'), 'String')
 | 
				
			||||||
 | 
					                objExpCassArray = ''
 | 
				
			||||||
 | 
					                IF SRP_Json(objExpCassArray, 'New', 'Array') then
 | 
				
			||||||
 | 
					                    for each SlotData in ExpectedCassetteArray using @FM setting sPos
 | 
				
			||||||
 | 
					                        Slot = SlotData<1, 1>
 | 
				
			||||||
 | 
					                        WaferPresent = SlotData<1, 2>
 | 
				
			||||||
 | 
					                        objSlot = ''
 | 
				
			||||||
 | 
					                        If SRP_Json(objSlot, 'New', 'Object') then
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'SetValue', 'SlotNo', Slot, 'Number')
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'SetValue', 'WaferPresent', WaferPresent, 'Boolean')
 | 
				
			||||||
 | 
					                           SRP_Json(objExpCassArray, 'Add', objSlot)
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'Release')
 | 
				
			||||||
 | 
					                        end
 | 
				
			||||||
 | 
					                    Next SlotData
 | 
				
			||||||
 | 
					                    SRP_Json(objBody, 'Set', 'ExpectedWaferArray', objExpCassArray)
 | 
				
			||||||
 | 
					                    SRP_Json(objExpCassArray, 'Release')
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					                ResponseJson = SRP_Json(objBody, 'Stringify', 'Styled')
 | 
				
			||||||
 | 
					                HTTP_Services('SetResponseBody', ResponseJson)
 | 
				
			||||||
 | 
					                ResponseCode = 200 
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					                ErrorMessage =  Error_Services('GetMessage')
 | 
				
			||||||
 | 
					                ResponseCode = 500
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end else
 | 
				
			||||||
 | 
					           ErrorMessage = 'Cassette ID Barcode data not detected.'
 | 
				
			||||||
 | 
					           ResponseCode = 500
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        SRP_Json(objBody, 'Release')
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If ErrorMessage EQ '' then
 | 
				
			||||||
 | 
					        //Log Success
 | 
				
			||||||
 | 
					        LogData    = ''
 | 
				
			||||||
 | 
					        LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					        LogData<2> = UserId
 | 
				
			||||||
 | 
					        LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					        LogData<4> = 'New wafer counter transaction started successfully. Barcode Data: ' : CassBarcodeData : '. Cass Id: ' : CassId
 | 
				
			||||||
 | 
					        Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					        //Log Failure
 | 
				
			||||||
 | 
					        LogData    = ''
 | 
				
			||||||
 | 
					        LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					        LogData<2> = UserId
 | 
				
			||||||
 | 
					        LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					        LogData<4> = 'New wafer counter transaction finished with errors. Response Code: ' : ResponseCode : '. Error Message: ' : ErrorMessage : '. Barcode Data: ' : CassBarcodeData : '. Cass Id: ' : CassId
 | 
				
			||||||
 | 
					        Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
				
			||||||
 | 
					    HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					API wafercounter.completewafercount.POST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ErrorMessage = ''
 | 
				
			||||||
 | 
					    ResponseCode = ''
 | 
				
			||||||
 | 
					    ResponseMessage = ''
 | 
				
			||||||
 | 
					    WaferCounterId = ''
 | 
				
			||||||
 | 
					    CassId = ''
 | 
				
			||||||
 | 
					    Body = ''
 | 
				
			||||||
 | 
					    OIWizardID = ''
 | 
				
			||||||
 | 
					    UserId = ''
 | 
				
			||||||
 | 
					    Cookies    = HTTP_Services('GetHTTPCookie')
 | 
				
			||||||
 | 
					    For each Cookie in Cookies using ';'
 | 
				
			||||||
 | 
					        Key = Field(Cookie, '=', 1)
 | 
				
			||||||
 | 
					        If Key EQ 'sessionID' then
 | 
				
			||||||
 | 
					            OIWizardID = Field(Cookie, '=', 2)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    Next Cookie
 | 
				
			||||||
 | 
					    ValidSession = OI_Wizard_Services('ValidateSession', OIWizardID)
 | 
				
			||||||
 | 
					    CassBarcodeData = ''
 | 
				
			||||||
 | 
					    UserId = Xlate('OI_WIZARD', OIWizardID, OI_WIZARD.EMPLOYEE_ID$, 'X')
 | 
				
			||||||
 | 
					    StatusCode  = ''
 | 
				
			||||||
 | 
					    Body        = HTTP_Services('GetHTTPPostString', True$)
 | 
				
			||||||
 | 
					    DecodedJSON = HTTP_Services('DecodePercentString', Body)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Log Entry into API -
 | 
				
			||||||
 | 
					    LogData    = ''
 | 
				
			||||||
 | 
					    LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					    LogData<2> = UserId
 | 
				
			||||||
 | 
					    LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					    LogData<4> = 'Complete wafer counter transaction started.'
 | 
				
			||||||
 | 
					    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If SRP_JSON(objBody, 'Parse', Body) EQ '' then
 | 
				
			||||||
 | 
					        CassId = SRP_JSON(objBody, 'GetValue', 'CassId')
 | 
				
			||||||
 | 
					        CassType = SRP_Json(objBody, 'GetValue', 'CassType')
 | 
				
			||||||
 | 
					        ToolBarcodeData      = SRP_JSON(objBody, 'GetValue', 'ToolBarcodeData')
 | 
				
			||||||
 | 
					        ExpectedQty = SRP_JSON(objBody, 'GetValue', 'ExpectedQty')
 | 
				
			||||||
 | 
					        If CassId NE '' then
 | 
				
			||||||
 | 
					            WaferCounterId = Wafer_Counter_Services('ProcessTool2DBarcode', ToolBarcodeData, CassId, CassType, UserId)
 | 
				
			||||||
 | 
					            If Error_Services('NoError') then
 | 
				
			||||||
 | 
					                WaferCounterRec = Database_Services('ReadDataRow', 'WAFER_COUNTER', WaferCounterId, True$, 0, False$)
 | 
				
			||||||
 | 
					                ScanDtm = OConv(WaferCounterRec<WAFER_COUNTER.SCAN_DTM$>, 'DT4/')
 | 
				
			||||||
 | 
					                ToolId = WaferCounterRec<WAFER_COUNTER.SCAN_TOOL$>
 | 
				
			||||||
 | 
					                WaferCount = WaferCounterRec<WAFER_COUNTER.SCAN_QTY$>
 | 
				
			||||||
 | 
					                MatchingWfrCount = ExpectedQty EQ WaferCount
 | 
				
			||||||
 | 
					                WaferCountData = WaferCounterRec<WAFER_COUNTER.SCAN_WAFER_MAP$>
 | 
				
			||||||
 | 
					                swap 1 with 1:@FM in WaferCountData
 | 
				
			||||||
 | 
					                swap 0 with 0:@FM in WaferCountData
 | 
				
			||||||
 | 
					                WaferCountData[-1, -1] = ''
 | 
				
			||||||
 | 
					                CassetteArray = ''
 | 
				
			||||||
 | 
					                for i = 25 to 1 step -1
 | 
				
			||||||
 | 
					                    Slot = i
 | 
				
			||||||
 | 
					                    WaferPresent = WaferCountData<i>
 | 
				
			||||||
 | 
					                    CassetteArray<-1, 1> = Slot : @VM : WaferPresent
 | 
				
			||||||
 | 
					                Next i
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                WaferCountArray = ''
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'WaferCounterId', WaferCounterId, 'String')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'ScanDtm', ScanDtm, 'String')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'WaferCount', WaferCount, 'Number')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'ToolId', ToolId, 'String')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'MatchingWaferCount', MatchingWfrCount, 'Boolean')
 | 
				
			||||||
 | 
					                SRP_Json(objBody, 'SetValue', 'WaferCounterId', WaferCounterId, 'String')
 | 
				
			||||||
 | 
					                objCassArray = ''
 | 
				
			||||||
 | 
					                IF SRP_Json(objCassArray, 'New', 'Array') then
 | 
				
			||||||
 | 
					                    for each SlotData in CassetteArray using @FM setting sPos
 | 
				
			||||||
 | 
					                        Slot = SlotData<1, 1>
 | 
				
			||||||
 | 
					                        WaferPresent = SlotData<1, 2>
 | 
				
			||||||
 | 
					                        objSlot = ''
 | 
				
			||||||
 | 
					                        If SRP_Json(objSlot, 'New', 'Object') then
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'SetValue', 'SlotNo', Slot, 'Number')
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'SetValue', 'WaferPresent', WaferPresent, 'Boolean')
 | 
				
			||||||
 | 
					                           SRP_Json(objCassArray, 'Add', objSlot)
 | 
				
			||||||
 | 
					                           SRP_Json(objSlot, 'Release')
 | 
				
			||||||
 | 
					                        end
 | 
				
			||||||
 | 
					                    Next SlotData
 | 
				
			||||||
 | 
					                    SRP_Json(objBody, 'Set', 'WaferArray', objCassArray)
 | 
				
			||||||
 | 
					                    SRP_Json(objCassArray, 'Release')
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					                ResponseJson = SRP_Json(objBody, 'Stringify', 'Styled')
 | 
				
			||||||
 | 
					                HTTP_Services('SetResponseBody', ResponseJson)
 | 
				
			||||||
 | 
					                ResponseCode = 200 
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					                ErrorMessage =  Error_Services('GetMessage')
 | 
				
			||||||
 | 
					                ResponseCode = 500
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end else
 | 
				
			||||||
 | 
					           ErrorMessage = 'Cassette ID Barcode data not detected.'
 | 
				
			||||||
 | 
					           ResponseCode = 500
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        SRP_Json(objBody, 'Release')
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If ErrorMessage EQ '' then
 | 
				
			||||||
 | 
					        //Log Success
 | 
				
			||||||
 | 
					        LogData    = ''
 | 
				
			||||||
 | 
					        LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					        LogData<2> = UserId
 | 
				
			||||||
 | 
					        LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					        LogData<4> = 'Completed wafer counter transaction finished successfully. Barcode Data: ' : CassBarcodeData : '. WAFER_COUNTER Id: ' : WaferCounterId : '. Cass Id: ' : CassId
 | 
				
			||||||
 | 
					        Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					        //Log Failure
 | 
				
			||||||
 | 
					        LogData    = ''
 | 
				
			||||||
 | 
					        LogData<1> = LoggingDTM
 | 
				
			||||||
 | 
					        LogData<2> = UserId
 | 
				
			||||||
 | 
					        LogData<3> = OIWizardId
 | 
				
			||||||
 | 
					        LogData<4> = 'New wafer counter transaction finished with errors. Response Code: ' : ResponseCode : '. Error Message: ' : ErrorMessage : '. Barcode Data: ' : CassBarcodeData : '. Wafer Counter Id: ' : WaferCounterId : '. Cass Id: ' : CassId
 | 
				
			||||||
 | 
					        Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    HTTP_Services('SetResponseHeaderField', 'Content-Location', FullEndpointURL)
 | 
				
			||||||
 | 
					    HTTP_Services('SetResponseStatus', ResponseCode, ErrorMessage)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end api
 | 
				
			||||||
@ -32,6 +32,8 @@ $Insert WO_LOG_EQUATES
 | 
				
			|||||||
$Insert WM_OUT_EQUATES
 | 
					$Insert WM_OUT_EQUATES
 | 
				
			||||||
$Insert RLIST_EQUATES
 | 
					$Insert RLIST_EQUATES
 | 
				
			||||||
$Insert WAFER_COUNTER_EQUATES
 | 
					$Insert WAFER_COUNTER_EQUATES
 | 
				
			||||||
 | 
					$Insert TOOL_EQUATES
 | 
				
			||||||
 | 
					$Insert TOOL_LOG_EQUATES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Equ Tab$       to \09\
 | 
					Equ Tab$       to \09\
 | 
				
			||||||
Equ CRLF$      to \0D0A\
 | 
					Equ CRLF$      to \0D0A\
 | 
				
			||||||
@ -43,8 +45,9 @@ Equ next_cur$  To 1
 | 
				
			|||||||
Equ add_exist$ to 2
 | 
					Equ add_exist$ to 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare subroutine  Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON
 | 
					Declare subroutine  Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON
 | 
				
			||||||
Declare function    Database_Services, Environment_Services, Logging_Services, Httpclient_Services
 | 
					Declare subroutine Wafer_Counter_Services, Lot_Event_Services
 | 
				
			||||||
Declare function    RTI_CreateGuid, SRP_JSON
 | 
					Declare function    Database_Services, Environment_Services, Logging_Services, Httpclient_Services, OConv
 | 
				
			||||||
 | 
					Declare function    RTI_CreateGuid, SRP_JSON, WO_Mat_Services, WM_Out_Services, Wafer_Counter_Services, Datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
 | 
					LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\WaferCounter'
 | 
				
			||||||
LogDate     = Oconv(Date(), 'D4/')
 | 
					LogDate     = Oconv(Date(), 'D4/')
 | 
				
			||||||
@ -263,6 +266,8 @@ Service AddScan(LotID, ScanQty, ScanDtm, ScanTool, ScanUser, ScanLocation, Wafer
 | 
				
			|||||||
    Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap
 | 
					    Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap
 | 
				
			||||||
    Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record)
 | 
					    Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    Response = KeyId
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -393,6 +398,161 @@ Service GetWaferCounterToolID(WaferSize=WAFER_SIZES, Location=LOCATIONS)
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// ProcessCass2DBarcode
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Takes in the raw barcode data for a 2D Cassette label. Returns a single field array with 3 field delimited by @VM
 | 
				
			||||||
 | 
					// CassId, Expected Qty, and Cass Type
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					Service ProcessCass2DBarcode(BarcodeText)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ErrorMessage = ''
 | 
				
			||||||
 | 
					    ExpectedSlotWaferMap = ''
 | 
				
			||||||
 | 
					    ExpectedQty = ''
 | 
				
			||||||
 | 
					    CassId = ''
 | 
				
			||||||
 | 
					    CassType = ''
 | 
				
			||||||
 | 
					    If BarcodeText NE '' then
 | 
				
			||||||
 | 
					        DelimCnt      = DCount(BarcodeText, '|')
 | 
				
			||||||
 | 
					        If DelimCnt EQ 8 then
 | 
				
			||||||
 | 
					            CassId = Field(BarcodeText, '|', 3)
 | 
				
			||||||
 | 
					            If CassId NE '' then
 | 
				
			||||||
 | 
					                If CassId[1, 2] EQ '1T' then
 | 
				
			||||||
 | 
					                    CassId[1, 2] = ''
 | 
				
			||||||
 | 
					                    Begin Case
 | 
				
			||||||
 | 
					                        Case CassId[1, 1] EQ 'O'
 | 
				
			||||||
 | 
					                            CassId[1, 1] = ''
 | 
				
			||||||
 | 
					                            CassType = 'WM_OUT'
 | 
				
			||||||
 | 
					                        Case (CassId[1, 1] EQ 'I')
 | 
				
			||||||
 | 
					                            CassId[1, 1] = ''
 | 
				
			||||||
 | 
					                            CassType = 'WM_IN'
 | 
				
			||||||
 | 
					                        Case Otherwise$
 | 
				
			||||||
 | 
					                            CassType = 'RDS'
 | 
				
			||||||
 | 
					                    End Case
 | 
				
			||||||
 | 
					                    Convert '.' to '*' in CassId
 | 
				
			||||||
 | 
					                    Begin Case
 | 
				
			||||||
 | 
					                        Case RowExists('RDS', CassId)
 | 
				
			||||||
 | 
					                            ExpectedQty = Xlate('RDS', CassId, 'WFRS_OUT', 'X')
 | 
				
			||||||
 | 
					                        Case RowExists('WM_OUT', CassId)
 | 
				
			||||||
 | 
					                            ExpectedQty = Xlate('WM_OUT', CassId, 'WAFER_CNT', 'X')
 | 
				
			||||||
 | 
					                    End Case
 | 
				
			||||||
 | 
					                end                    
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					                ErrorMessage = 'Invalid Lot Label Scan. Unable to determine Cass Id'
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end else
 | 
				
			||||||
 | 
					            ErrorMessage = 'Invalid Lot Label Scan.'
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					        ErrorMessage = 'Scan data was null.'
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If ErrorMessage EQ '' then
 | 
				
			||||||
 | 
					       Response = CassId : @VM: ExpectedQty : @VM : CassType
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					       Error_Services('Add', ErrorMessage) 
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// ProcessTool2DBarcode
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Takes in the raw barcode data for a wafer counter label, Cassette Id, Cassette Type, and UserId(Optional)
 | 
				
			||||||
 | 
					// Returns a key ID for a completed WAFER_COUNTER record.
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					Service ProcessTool2DBarcode(BarcodeText, CassId, CassType, UserId)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ErrorMessage = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    If BarcodeText NE '' then
 | 
				
			||||||
 | 
					        DelimCnt      = DCount(BarcodeText, '|')
 | 
				
			||||||
 | 
					        If DelimCnt EQ 2 then
 | 
				
			||||||
 | 
					            WaferSize   = Field(BarcodeText, '|', 1)
 | 
				
			||||||
 | 
					            Area        = Field(BarcodeText, '|', 2)
 | 
				
			||||||
 | 
					            If Environment_Services('IsProd') then
 | 
				
			||||||
 | 
					               WcJson      = Wafer_Counter_Services('GetWaferCounterJSON', WaferSize, Area, CassID) 
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					               WcJson      = Wafer_Counter_Services('GetWaferCounterJSONTestData', WaferSize, Area, CassID) 
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            If Error_Services('NoError') then
 | 
				
			||||||
 | 
					                objJSON = ''
 | 
				
			||||||
 | 
					                If SRP_JSON(objJSON, 'Parse', WcJson) EQ '' then
 | 
				
			||||||
 | 
					                    ScanDtm          = SRP_JSON(objJSON, 'GetValue', 'dateTimeFormatted')
 | 
				
			||||||
 | 
					                    ToolID           = SRP_JSON(objJSON, 'GetValue', 'equipmentId')
 | 
				
			||||||
 | 
					                    WaferCount       = SRP_JSON(objJSON, 'GetValue', 'total')
 | 
				
			||||||
 | 
					                    SlotMap          = SRP_JSON(objJSON, 'GetValue', 'slotMap')
 | 
				
			||||||
 | 
					                    SRP_JSON(objJSON, 'Release')
 | 
				
			||||||
 | 
					                    ToolCurrModeKey = Database_Services('ReadDataColumn', 'TOOL', ToolId, TOOL_CURR_MODE_KEY$, True$, 0, False$)
 | 
				
			||||||
 | 
					                    ToolCurrMode = Database_Services('ReadDataColumn', 'TOOL_LOG', ToolCurrModeKey, TOOL_LOG_TOOL_MODE$, True$, 0, False$)
 | 
				
			||||||
 | 
					                    If ToolCurrMode EQ 'PROD' OR ToolCurrMode EQ 'LIM' then
 | 
				
			||||||
 | 
					                        WaferCounterId = Wafer_Counter_Services('AddScan', CassID, WaferCount, ScanDtm, ToolID, UserId, Area, SlotMap)
 | 
				
			||||||
 | 
					                        If Error_Services('NoError') then
 | 
				
			||||||
 | 
					                            Lot_Event_Services('CreateLotEvent', CassId, ScanDtm, 'WAFER_COUNTER', 'Wafer counter data received for lot. ' : WaferCount : ' wafers found.', ToolId, UserId, True$, CassType)
 | 
				
			||||||
 | 
					                        end
 | 
				
			||||||
 | 
					                    end else
 | 
				
			||||||
 | 
					                        ErrorMessage = 'Wafer counter is currently down and cannot be used to log wafer counts.'
 | 
				
			||||||
 | 
					                    end
 | 
				
			||||||
 | 
					                end else
 | 
				
			||||||
 | 
					                    ErrorMessage = 'Error parsing response from wafer counter.'
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end else
 | 
				
			||||||
 | 
					                ErrorMessage = Error_Services('GetMessage')
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end else
 | 
				
			||||||
 | 
					            ErrorMessage = 'Invalid tool scan.'    
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					       ErrorMessage = 'Scan data was null.' 
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    If ErrorMessage EQ '' then
 | 
				
			||||||
 | 
					        Response = WaferCounterId
 | 
				
			||||||
 | 
					    end else
 | 
				
			||||||
 | 
					       Error_Services('Add', ErrorMessage) 
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// GetWaferCounterJSONTestData
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Emulates GetWaferCounterJson service. 
 | 
				
			||||||
 | 
					//----------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					Service GetWaferCounterJSONTestData(WaferSize, ToolLocation, CassID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    If ( (WaferSize NE '') and (ToolLocation NE '') and (CassID NE '') ) then 
 | 
				
			||||||
 | 
					        Response = ''
 | 
				
			||||||
 | 
					        objJson = ''
 | 
				
			||||||
 | 
					        If SRP_JSON(objJson, 'New', 'Object') then
 | 
				
			||||||
 | 
					            SRP_JSON(objJson, 'SetValue', 'dateTimeFormatted', Datetime(), 'String')
 | 
				
			||||||
 | 
					            SRP_JSON(objJson, 'SetValue', 'equipmentId', 'WC8INCH1', 'String')
 | 
				
			||||||
 | 
					            SRP_JSON(objJson, 'SetValue', 'total', 24, 'Number')
 | 
				
			||||||
 | 
					            SRP_JSON(objJson, 'SetValue', 'slotMap', '1111111110111111111111111', 'String') 
 | 
				
			||||||
 | 
					            Response = SRP_Json(objJson, 'Stringify', 'Styled')
 | 
				
			||||||
 | 
					            SRP_JSON(objJSON, 'Release')
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        If Error_Services('NoError') then
 | 
				
			||||||
 | 
					            StatusCode = 200
 | 
				
			||||||
 | 
					            If StatusCode NE 200 then
 | 
				
			||||||
 | 
									Begin Case
 | 
				
			||||||
 | 
										Case Response EQ ''
 | 
				
			||||||
 | 
											ErrorMsg = 'Unexpected server error.'
 | 
				
			||||||
 | 
										Case Response EQ 'No files!'
 | 
				
			||||||
 | 
											ErrorMsg = 'No data. Please re-seat cassette and try again.'
 | 
				
			||||||
 | 
										Case Otherwise$
 | 
				
			||||||
 | 
											// Use message in response body to populate error services
 | 
				
			||||||
 | 
											ErrorMsg = Response
 | 
				
			||||||
 | 
									End Case
 | 
				
			||||||
 | 
					                Error_Services('Add', ErrorMsg)
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Internal GoSubs
 | 
					// Internal GoSubs
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
@ -405,3 +565,4 @@ ClearCursors:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1231,19 +1231,23 @@ Service SignVoidNonEpp(WOMatKey, Username)
 | 
				
			|||||||
						    Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
 | 
											    Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
 | 
				
			||||||
						    If Error_Services('NoError') then
 | 
											    If Error_Services('NoError') then
 | 
				
			||||||
                                LotEventParams = ''
 | 
					                                LotEventParams = ''
 | 
				
			||||||
                                LotEventParams<1,1> = 'CreateLotEvent'
 | 
					                                LotEventParams<1,1> = 'CreateLotEvent' ; //Service Module
 | 
				
			||||||
                                LotEventParams<1,4> = DateTime()
 | 
					                                LotEventParams<1,2> = ''; //Legacy Lot Id, set below
 | 
				
			||||||
                                LotEventParams<1,5> = 'VOID'
 | 
					                                LotEventParams<1,3> = DateTime(); //Datetime
 | 
				
			||||||
                                LotEventParams<1,6> = 'Lot voided by ' : Username
 | 
					                                LotEventParams<1,4> = 'VOID'; //Event Type
 | 
				
			||||||
                                LotEventParams<1,11> = Username
 | 
					                                LotEventParams<1,5> = 'Lot voided by ' : Username; //Event Note
 | 
				
			||||||
 | 
					                                LotEventParams<1,6> = ''; //Equipment id
 | 
				
			||||||
 | 
					                                LotEventParams<1,7> = Username ;//User Id
 | 
				
			||||||
 | 
					                                LotEventParams<1,8> = True$; //IsLegacyLotId
 | 
				
			||||||
 | 
					                                LotEventParams<1,9> = ''; //Legacy Lot Type, set below
 | 
				
			||||||
                                If RDSNo NE '' then
 | 
					                                If RDSNo NE '' then
 | 
				
			||||||
                                    LotEventParams<1,2> = RDSNo
 | 
					                                    LotEventParams<1,2> = RDSNo
 | 
				
			||||||
                                    LotEventParams<1,3> = 'RDS'
 | 
					                                    LotEventParams<1,9> = 'RDS'; //Legacy Lot Type
 | 
				
			||||||
                                    Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
					                                    Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
				
			||||||
                                end else
 | 
					                                end else
 | 
				
			||||||
                                    LotEventParams<1,2> = WoMatKey
 | 
					                                    LotEventParams<1,2> = WoMatKey
 | 
				
			||||||
                                    LotEventParams<1,3> = 'WO_MAT'
 | 
					                                    LotEventParams<1,9> = 'WO_MAT'
 | 
				
			||||||
                                    Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
					                                    Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
				
			||||||
                                end
 | 
					                                end
 | 
				
			||||||
                                If Error_Services('NoError') then
 | 
					                                If Error_Services('NoError') then
 | 
				
			||||||
                                    //Add inventory transaction
 | 
					                                    //Add inventory transaction
 | 
				
			||||||
@ -1311,13 +1315,15 @@ Service SignVoidWMI(WMInKey, Username)
 | 
				
			|||||||
					If Error_Services('NoError') then
 | 
										If Error_Services('NoError') then
 | 
				
			||||||
						LotEventParams = ''
 | 
											LotEventParams = ''
 | 
				
			||||||
						LotEventParams<1,1> = 'CreateLotEvent'
 | 
											LotEventParams<1,1> = 'CreateLotEvent'
 | 
				
			||||||
						LotEventParams<1,4> = DateTime()
 | 
					 | 
				
			||||||
						LotEventParams<1,5> = 'VOID'
 | 
					 | 
				
			||||||
						LotEventParams<1,6> = 'Lot voided by ' : Username
 | 
					 | 
				
			||||||
						LotEventParams<1,11> = Username
 | 
					 | 
				
			||||||
						LotEventParams<1,2> = WMInKey
 | 
											LotEventParams<1,2> = WMInKey
 | 
				
			||||||
						LotEventParams<1,3> = 'WM_IN'
 | 
											LotEventParams<1,3> = DateTime()
 | 
				
			||||||
						Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
											LotEventParams<1,4> = 'VOID'
 | 
				
			||||||
 | 
											LotEventParams<1,5> = 'Lot voided by ' : Username
 | 
				
			||||||
 | 
											LotEventParams<1,6> = ''
 | 
				
			||||||
 | 
											LotEventParams<1,7> = Username
 | 
				
			||||||
 | 
											LotEventParams<1,8> = True$
 | 
				
			||||||
 | 
											LotEventParams<1,9> = 'WM_IN'
 | 
				
			||||||
 | 
											Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
				
			||||||
						If Error_Services('NoError') then
 | 
											If Error_Services('NoError') then
 | 
				
			||||||
							//Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
 | 
												//Check if WMO is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
 | 
				
			||||||
							WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey
 | 
												WMOKey = WMInKey; //the paired WMO key is the same as the WMIKey
 | 
				
			||||||
@ -1386,13 +1392,15 @@ Service SignVoidWMO(WMOutKey, Username)
 | 
				
			|||||||
					If Error_Services('NoError') then
 | 
										If Error_Services('NoError') then
 | 
				
			||||||
						LotEventParams = ''
 | 
											LotEventParams = ''
 | 
				
			||||||
						LotEventParams<1,1> = 'CreateLotEvent'
 | 
											LotEventParams<1,1> = 'CreateLotEvent'
 | 
				
			||||||
						LotEventParams<1,4> = DateTime()
 | 
					 | 
				
			||||||
						LotEventParams<1,5> = 'VOID'
 | 
					 | 
				
			||||||
						LotEventParams<1,6> = 'Lot voided by ' : Username
 | 
					 | 
				
			||||||
						LotEventParams<1,11> = Username
 | 
					 | 
				
			||||||
						LotEventParams<1,2> = WMOutKey
 | 
											LotEventParams<1,2> = WMOutKey
 | 
				
			||||||
						LotEventParams<1,3> = 'WM_OUT'
 | 
											LotEventParams<1,3> = DateTime()
 | 
				
			||||||
						Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
											LotEventParams<1,4> = 'VOID'
 | 
				
			||||||
 | 
											LotEventParams<1,5> = 'Lot voided by ' : Username
 | 
				
			||||||
 | 
											LotEventParams<1,6> = ''
 | 
				
			||||||
 | 
											LotEventParams<1,7> = Username
 | 
				
			||||||
 | 
											LotEventParams<1,8> = True$
 | 
				
			||||||
 | 
											LotEventParams<1,9> = 'WM_OUT'
 | 
				
			||||||
 | 
											Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
				
			||||||
						If Error_Services('NoError') then
 | 
											If Error_Services('NoError') then
 | 
				
			||||||
							//Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
 | 
												//Check if WMI is also voided. If it is, remove it from the WO_MAT_KEY field in WO_LOG, and void the WO_MAT record
 | 
				
			||||||
							WMIKey = WMOutKey; //the paired WMO key is the same as the WMIKey
 | 
												WMIKey = WMOutKey; //the paired WMO key is the same as the WMIKey
 | 
				
			||||||
@ -1558,3 +1566,4 @@ ClearCursors:
 | 
				
			|||||||
return
 | 
					return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@ Compile function WO_MAT_Services(@Service, @Params)
 | 
				
			|||||||
#pragma precomp SRP_PreCompiler
 | 
					#pragma precomp SRP_PreCompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services
 | 
					Declare function Database_Services, Error_Services, SRP_Json, SRP_Com, Environment_Services, Logging_Services
 | 
				
			||||||
Declare function Datetime
 | 
					Declare function Datetime, GetTickCount
 | 
				
			||||||
Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services
 | 
					Declare subroutine Error_Services, SRP_Json, SRP_Com, Wo_Mat_Services, Database_Services, Logging_Services
 | 
				
			||||||
Declare subroutine obj_wo_mat_log, Set_Status
 | 
					Declare subroutine obj_wo_mat_log, Set_Status, Mona_Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$insert LOGICAL
 | 
					$insert LOGICAL
 | 
				
			||||||
$Insert APP_INSERTS
 | 
					$Insert APP_INSERTS
 | 
				
			||||||
@ -20,6 +20,13 @@ Headers		= 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'Missing Signature' : @FM :
 | 
				
			|||||||
objSyncLog	= Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
					objSyncLog	= Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
				
			||||||
LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
					LoggingDTM  = LogDate : ' ' : LogTime   ; // Logging DTM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IsProd = Environment_Services('IsProd')
 | 
				
			||||||
 | 
					If IsProd EQ True$ then
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_WOMATSERVICES'
 | 
				
			||||||
 | 
					end else
 | 
				
			||||||
 | 
						MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_WOMATSERVICES'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GoToService else
 | 
					GoToService else
 | 
				
			||||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
						Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@ -379,6 +386,9 @@ Service SyncWOMatInvActionsAndSigProfile(WOMatKey)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service CassetteIsLastInWo(WoMatKey)
 | 
					Service CassetteIsLastInWo(WoMatKey)
 | 
				
			||||||
 | 
						StartTick = GetTickCount()
 | 
				
			||||||
 | 
					    MetricName = 'CassetteIsLastInWo'
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	IsLastInWo = False$
 | 
						IsLastInWo = False$
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
 | 
						If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
 | 
				
			||||||
@ -424,6 +434,9 @@ Service CassetteIsLastInWo(WoMatKey)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	Response = IsLastInWo
 | 
						Response = IsLastInWo
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						EndTick = GetTickCount()
 | 
				
			||||||
 | 
					    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
				
			||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service SetWoMatVoidFlag(WoMatKey, Username)
 | 
					Service SetWoMatVoidFlag(WoMatKey, Username)
 | 
				
			||||||
@ -473,3 +486,4 @@ Service SetWoMatVoidFlag(WoMatKey, Username)
 | 
				
			|||||||
end service
 | 
					end service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
compile insert NICA_CHECKLISTS_EQUATES
 | 
					compile insert NICA_CHECKLISTS_EQUATES
 | 
				
			||||||
/*----------------------------------------
 | 
					/*----------------------------------------
 | 
				
			||||||
 Author : Table Create Insert Routine
 | 
					 Author : Table Create Insert Routine
 | 
				
			||||||
 Written : 05/03/2025
 | 
					 Written : 03/06/2025
 | 
				
			||||||
 Description : Insert for Table NICA_CHECKLISTS
 | 
					 Description : Insert for Table NICA_CHECKLISTS
 | 
				
			||||||
----------------------------------------*/
 | 
					----------------------------------------*/
 | 
				
			||||||
#ifndef __NICA_CHECKLISTS_EQUATES__ 
 | 
					#ifndef __NICA_CHECKLISTS_EQUATES__ 
 | 
				
			||||||
@ -13,6 +13,6 @@ compile insert NICA_CHECKLISTS_EQUATES
 | 
				
			|||||||
   equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$     to 4
 | 
					   equ NICA_CHECKLISTS.NICA_ORDER_FLOW_TYPE$     to 4
 | 
				
			||||||
   equ NICA_CHECKLISTS.REACTOR_TYPES$            to 5
 | 
					   equ NICA_CHECKLISTS.REACTOR_TYPES$            to 5
 | 
				
			||||||
   equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$       to 6
 | 
					   equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$       to 6
 | 
				
			||||||
 | 
					   equ NICA_CHECKLISTS.REMOVE_IF_INTRUSIVE$      to 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
compile insert NICA_ORDERS_EQUATES
 | 
					compile insert NICA_ORDERS_EQUATES
 | 
				
			||||||
/*----------------------------------------
 | 
					/*----------------------------------------
 | 
				
			||||||
 Author : Table Create Insert Routine
 | 
					 Author : Table Create Insert Routine
 | 
				
			||||||
 Written : 05/12/2024
 | 
					 Written : 28/05/2025
 | 
				
			||||||
 Description : Insert for Table NICA_ORDERS
 | 
					 Description : Insert for Table NICA_ORDERS
 | 
				
			||||||
----------------------------------------*/
 | 
					----------------------------------------*/
 | 
				
			||||||
#ifndef __NICA_ORDERS_EQUATES__ 
 | 
					#ifndef __NICA_ORDERS_EQUATES__ 
 | 
				
			||||||
@ -18,7 +18,6 @@ compile insert NICA_ORDERS_EQUATES
 | 
				
			|||||||
   equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
 | 
					   equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
 | 
				
			||||||
   equ NICA_ORDERS.CREATED_DTM$          to 10
 | 
					   equ NICA_ORDERS.CREATED_DTM$          to 10
 | 
				
			||||||
   equ NICA_ORDERS.CLOSED_DTM$           to 11
 | 
					   equ NICA_ORDERS.CLOSED_DTM$           to 11
 | 
				
			||||||
 | 
					   equ NICA_ORDERS.INTRUSIVE$            to 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,8 @@ compile insert PROC_QUEUE_EQUATES
 | 
				
			|||||||
   equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
 | 
					   equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
 | 
				
			||||||
   equ PROC_QUEUE.ERROR$            to 4
 | 
					   equ PROC_QUEUE.ERROR$            to 4
 | 
				
			||||||
   equ PROC_QUEUE.ENTRY_DTM$        to 5
 | 
					   equ PROC_QUEUE.ENTRY_DTM$        to 5
 | 
				
			||||||
 | 
					   equ PROC_QUEUE.NUM_ATTEMPTS$		to 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								LSL2/STPROCINS/PROC_QUEUE_FAILED_EQUATES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								LSL2/STPROCINS/PROC_QUEUE_FAILED_EQUATES.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					compile insert PROC_QUEUE_FAILED_EQUATES
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					 Author : Table Create Insert Routine
 | 
				
			||||||
 | 
					 Written : 06/06/2025
 | 
				
			||||||
 | 
					 Description : Insert for Table PROC_QUEUE_FAILED
 | 
				
			||||||
 | 
					----------------------------------------*/
 | 
				
			||||||
 | 
					#ifndef __PROC_QUEUE_FAILED_EQUATES__ 
 | 
				
			||||||
 | 
					#define __PROC_QUEUE_FAILED_EQUATES__ 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.PROC_NAME$    to 1
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.PARAMS$       to 2
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.COMP_DTM$     to 3
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.ERROR$        to 4
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.ENTRY_DTM$    to 5
 | 
				
			||||||
 | 
					   equ PROC_QUEUE_FAILED.NUM_ATTEMPTS$ to 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		Reference in New Issue
	
	Block a user