Compare commits
	
		
			40 Commits
		
	
	
		
			4037b2fa45
			...
			06-16-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f48e277369 | |||
| 2d3f534a71 | |||
| f6ba173f47 | |||
| 98e02f8c40 | |||
| de6296b1d3 | |||
| ebd8b36d13 | |||
| 803f946c7e | |||
| 16c7bc6926 | |||
| 216df9b4ef | |||
| 5eec9386c2 | |||
| f3ad7adfa8 | |||
| c4fbf7c1d9 | |||
| 2a28c4b743 | |||
| e5f0e9b7f1 | |||
| 869787e0f3 | |||
| 38fc89dac6 | |||
| 614da8ad3b | |||
| dcb61e220c | |||
| 117e5c8b4b | |||
| 25c608c9a6 | |||
| 31632e28aa | |||
| 03b0c8f606 | |||
| 6cfb6e521e | |||
| 481f083804 | |||
| 18919090d8 | |||
| 550f376a0b | |||
| 6aad8036e5 | |||
| 4fc7eb189b | |||
| 5e917e65ac | |||
| 97f3c3fce2 | |||
| 27d55d83a1 | |||
| 4e213ff253 | |||
| 292bc4646b | |||
| ab55269f87 | |||
| f4c1a42812 | |||
| ec70fcc80b | |||
| e13f2df003 | |||
| 770a1de95b | |||
| 5c18f7ccd2 | |||
| 3c95ec88d8 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,4 @@
 | 
			
		||||
LSL2/STPROC/TEST_DANIEL*.txt
 | 
			
		||||
LSL2/STPROC/TEST_DAKOTA.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
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -17,8 +17,8 @@
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "136",
 | 
			
		||||
                "<1,6>": "201",
 | 
			
		||||
                "<1,7>": "-831",
 | 
			
		||||
                "<1,8>": "-522",
 | 
			
		||||
                "<1,7>": "-869",
 | 
			
		||||
                "<1,8>": "-498",
 | 
			
		||||
                "<1,9>": "5S",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x84CF0000",
 | 
			
		||||
@ -725,17 +725,17 @@
 | 
			
		||||
                "<4,2>": "",
 | 
			
		||||
                "<4,3>": "OLECONTROL.SRP.EditTable.1",
 | 
			
		||||
                "<4,4>": "NDW_5S",
 | 
			
		||||
                "<4,5>": "10",
 | 
			
		||||
                "<4,5>": "11",
 | 
			
		||||
                "<4,6>": "50",
 | 
			
		||||
                "<4,7>": "810",
 | 
			
		||||
                "<4,8>": "460",
 | 
			
		||||
                "<4,7>": "-10",
 | 
			
		||||
                "<4,8>": "-12",
 | 
			
		||||
                "<4,9>": "SRP.EditTable.1",
 | 
			
		||||
                "<4,10>": {
 | 
			
		||||
                    "<4,10,1>": "0x56000000",
 | 
			
		||||
                    "<4,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,11>": {
 | 
			
		||||
                    "<4,11,1>": "0x0",
 | 
			
		||||
                    "<4,11,1>": "0xC000",
 | 
			
		||||
                    "<4,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,12>": "2",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										675
									
								
								LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										675
									
								
								LSL2/OIWIN/NDW_ACKNOWLEDGE_MESSAGE.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,675 @@
 | 
			
		||||
{
 | 
			
		||||
    "header": {
 | 
			
		||||
        "version": 1,
 | 
			
		||||
        "type": "record"
 | 
			
		||||
    },
 | 
			
		||||
    "body": {
 | 
			
		||||
        "record1": {
 | 
			
		||||
            "<1>": "1010",
 | 
			
		||||
            "<2>": "3",
 | 
			
		||||
            "<3>": ""
 | 
			
		||||
        },
 | 
			
		||||
        "record2": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<1,2>": "",
 | 
			
		||||
                "<1,3>": "WINDOW",
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "137",
 | 
			
		||||
                "<1,6>": "173",
 | 
			
		||||
                "<1,7>": "-765",
 | 
			
		||||
                "<1,8>": "-539",
 | 
			
		||||
                "<1,9>": "Process Message",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x84C80000",
 | 
			
		||||
                    "<1,10,2>": "0x101"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x8000",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": {
 | 
			
		||||
                    "<1,18,1>": {
 | 
			
		||||
                        "<1,18,1,1>": "X",
 | 
			
		||||
                        "<1,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<1,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<1,18,1,4>": {
 | 
			
		||||
                            "<1,18,1,4,1>": "@SELF",
 | 
			
		||||
                            "<1,18,1,4,2>": "@EVENT",
 | 
			
		||||
                            "<1,18,1,4,3>": "@PARAM1",
 | 
			
		||||
                            "<1,18,1,4,4>": "@PARAM2",
 | 
			
		||||
                            "<1,18,1,4,5>": "@PARAM3",
 | 
			
		||||
                            "<1,18,1,4,6>": "@PARAM4",
 | 
			
		||||
                            "<1,18,1,4,7>": "@PARAM5",
 | 
			
		||||
                            "<1,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<1,18,1,5>": "",
 | 
			
		||||
                        "<1,18,1,6>": "",
 | 
			
		||||
                        "<1,18,1,7>": "",
 | 
			
		||||
                        "<1,18,1,8>": "",
 | 
			
		||||
                        "<1,18,1,9>": "",
 | 
			
		||||
                        "<1,18,1,10>": "",
 | 
			
		||||
                        "<1,18,1,11>": "",
 | 
			
		||||
                        "<1,18,1,12>": "",
 | 
			
		||||
                        "<1,18,1,13>": "",
 | 
			
		||||
                        "<1,18,1,14>": "",
 | 
			
		||||
                        "<1,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<1,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<1,19>": "CREATE",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": {
 | 
			
		||||
                    "<1,24,1>": "",
 | 
			
		||||
                    "<1,24,2>": "0",
 | 
			
		||||
                    "<1,24,3>": "0",
 | 
			
		||||
                    "<1,24,4>": "0",
 | 
			
		||||
                    "<1,24,5>": "",
 | 
			
		||||
                    "<1,24,6>": "0",
 | 
			
		||||
                    "<1,24,7>": "",
 | 
			
		||||
                    "<1,24,8>": "",
 | 
			
		||||
                    "<1,24,9>": "",
 | 
			
		||||
                    "<1,24,10>": "0",
 | 
			
		||||
                    "<1,24,11>": "0",
 | 
			
		||||
                    "<1,24,12>": "0",
 | 
			
		||||
                    "<1,24,13>": "0",
 | 
			
		||||
                    "<1,24,14>": "0",
 | 
			
		||||
                    "<1,24,15>": "0",
 | 
			
		||||
                    "<1,24,16>": "0",
 | 
			
		||||
                    "<1,24,17>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*INFINEON",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
                    "<1,37,1>": "0X10001",
 | 
			
		||||
                    "<1,37,2>": "0X10001"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
                "<1,44>": "",
 | 
			
		||||
                "<1,45>": "",
 | 
			
		||||
                "<1,46>": "",
 | 
			
		||||
                "<1,47>": "",
 | 
			
		||||
                "<1,48>": "",
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": {
 | 
			
		||||
                    "<1,62,1>": "0",
 | 
			
		||||
                    "<1,62,2>": "",
 | 
			
		||||
                    "<1,62,3>": "",
 | 
			
		||||
                    "<1,62,4>": "2",
 | 
			
		||||
                    "<1,62,5>": "0",
 | 
			
		||||
                    "<1,62,6>": "0",
 | 
			
		||||
                    "<1,62,7>": "",
 | 
			
		||||
                    "<1,62,8>": "0.50",
 | 
			
		||||
                    "<1,62,9>": "5.00",
 | 
			
		||||
                    "<1,62,10>": "0.00"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "0",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record3": {
 | 
			
		||||
            "<1>": {
 | 
			
		||||
                "<1,1>": "EDB_DATA",
 | 
			
		||||
                "<1,2>": "",
 | 
			
		||||
                "<1,3>": "EDITBOX",
 | 
			
		||||
                "<1,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<1,5>": "16",
 | 
			
		||||
                "<1,6>": "12",
 | 
			
		||||
                "<1,7>": "-17",
 | 
			
		||||
                "<1,8>": "-48",
 | 
			
		||||
                "<1,9>": "",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x56200840",
 | 
			
		||||
                    "<1,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0xC400",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "3",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "-2",
 | 
			
		||||
                "<1,15>": {
 | 
			
		||||
                    "<1,15,1>": {
 | 
			
		||||
                        "<1,15,1,1>": "Segoe UI",
 | 
			
		||||
                        "<1,15,1,2>": "-15",
 | 
			
		||||
                        "<1,15,1,3>": "400",
 | 
			
		||||
                        "<1,15,1,4>": "0",
 | 
			
		||||
                        "<1,15,1,5>": "0",
 | 
			
		||||
                        "<1,15,1,6>": "0",
 | 
			
		||||
                        "<1,15,1,7>": "0",
 | 
			
		||||
                        "<1,15,1,8>": "34",
 | 
			
		||||
                        "<1,15,1,9>": "0",
 | 
			
		||||
                        "<1,15,1,10>": "3",
 | 
			
		||||
                        "<1,15,1,11>": "2",
 | 
			
		||||
                        "<1,15,1,12>": "1"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
                "<1,18>": "",
 | 
			
		||||
                "<1,19>": "",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": "",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "<<None>>",
 | 
			
		||||
                "<1,29>": "<<None>>",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "0",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": "",
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
                "<1,44>": "",
 | 
			
		||||
                "<1,45>": "",
 | 
			
		||||
                "<1,46>": "",
 | 
			
		||||
                "<1,47>": "",
 | 
			
		||||
                "<1,48>": "",
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": "0",
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "PUB_OK",
 | 
			
		||||
                "<2,2>": "",
 | 
			
		||||
                "<2,3>": "PUSHBUTTON",
 | 
			
		||||
                "<2,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<2,5>": "-184",
 | 
			
		||||
                "<2,6>": "-37",
 | 
			
		||||
                "<2,7>": "80",
 | 
			
		||||
                "<2,8>": "24",
 | 
			
		||||
                "<2,9>": "&OK",
 | 
			
		||||
                "<2,10>": {
 | 
			
		||||
                    "<2,10,1>": "0x56000300",
 | 
			
		||||
                    "<2,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,11>": {
 | 
			
		||||
                    "<2,11,1>": "0x3005",
 | 
			
		||||
                    "<2,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,12>": "1",
 | 
			
		||||
                "<2,13>": {
 | 
			
		||||
                    "<2,13,1>": "-2",
 | 
			
		||||
                    "<2,13,2>": "-2",
 | 
			
		||||
                    "<2,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,14>": "-2",
 | 
			
		||||
                "<2,15>": {
 | 
			
		||||
                    "<2,15,1>": {
 | 
			
		||||
                        "<2,15,1,1>": "Segoe UI",
 | 
			
		||||
                        "<2,15,1,2>": "-12",
 | 
			
		||||
                        "<2,15,1,3>": "400",
 | 
			
		||||
                        "<2,15,1,4>": "0",
 | 
			
		||||
                        "<2,15,1,5>": "0",
 | 
			
		||||
                        "<2,15,1,6>": "0",
 | 
			
		||||
                        "<2,15,1,7>": "1",
 | 
			
		||||
                        "<2,15,1,8>": "0",
 | 
			
		||||
                        "<2,15,1,9>": "0",
 | 
			
		||||
                        "<2,15,1,10>": "0",
 | 
			
		||||
                        "<2,15,1,11>": "0",
 | 
			
		||||
                        "<2,15,1,12>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<2,16>": "",
 | 
			
		||||
                "<2,17>": "",
 | 
			
		||||
                "<2,18>": {
 | 
			
		||||
                    "<2,18,1>": {
 | 
			
		||||
                        "<2,18,1,1>": "X",
 | 
			
		||||
                        "<2,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<2,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<2,18,1,4>": {
 | 
			
		||||
                            "<2,18,1,4,1>": "@SELF",
 | 
			
		||||
                            "<2,18,1,4,2>": "@EVENT",
 | 
			
		||||
                            "<2,18,1,4,3>": "@PARAM1",
 | 
			
		||||
                            "<2,18,1,4,4>": "@PARAM2",
 | 
			
		||||
                            "<2,18,1,4,5>": "@PARAM3",
 | 
			
		||||
                            "<2,18,1,4,6>": "@PARAM4",
 | 
			
		||||
                            "<2,18,1,4,7>": "@PARAM5",
 | 
			
		||||
                            "<2,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,18,1,5>": "",
 | 
			
		||||
                        "<2,18,1,6>": "",
 | 
			
		||||
                        "<2,18,1,7>": "",
 | 
			
		||||
                        "<2,18,1,8>": "",
 | 
			
		||||
                        "<2,18,1,9>": "",
 | 
			
		||||
                        "<2,18,1,10>": "",
 | 
			
		||||
                        "<2,18,1,11>": "",
 | 
			
		||||
                        "<2,18,1,12>": "",
 | 
			
		||||
                        "<2,18,1,13>": "",
 | 
			
		||||
                        "<2,18,1,14>": "",
 | 
			
		||||
                        "<2,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<2,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<2,19>": "CLICK",
 | 
			
		||||
                "<2,20>": "",
 | 
			
		||||
                "<2,21>": "",
 | 
			
		||||
                "<2,22>": "",
 | 
			
		||||
                "<2,23>": "",
 | 
			
		||||
                "<2,24>": "",
 | 
			
		||||
                "<2,25>": "",
 | 
			
		||||
                "<2,26>": "",
 | 
			
		||||
                "<2,27>": "",
 | 
			
		||||
                "<2,28>": "",
 | 
			
		||||
                "<2,29>": "",
 | 
			
		||||
                "<2,30>": "",
 | 
			
		||||
                "<2,31>": "",
 | 
			
		||||
                "<2,32>": "",
 | 
			
		||||
                "<2,33>": "",
 | 
			
		||||
                "<2,34>": "",
 | 
			
		||||
                "<2,35>": "",
 | 
			
		||||
                "<2,36>": "",
 | 
			
		||||
                "<2,37>": "",
 | 
			
		||||
                "<2,38>": "",
 | 
			
		||||
                "<2,39>": "",
 | 
			
		||||
                "<2,40>": "-1",
 | 
			
		||||
                "<2,41>": {
 | 
			
		||||
                    "<2,41,1>": "",
 | 
			
		||||
                    "<2,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,42>": "",
 | 
			
		||||
                "<2,43>": "",
 | 
			
		||||
                "<2,44>": "",
 | 
			
		||||
                "<2,45>": "",
 | 
			
		||||
                "<2,46>": "",
 | 
			
		||||
                "<2,47>": "",
 | 
			
		||||
                "<2,48>": "",
 | 
			
		||||
                "<2,49>": "",
 | 
			
		||||
                "<2,50>": "",
 | 
			
		||||
                "<2,51>": "",
 | 
			
		||||
                "<2,52>": "",
 | 
			
		||||
                "<2,53>": "",
 | 
			
		||||
                "<2,54>": "",
 | 
			
		||||
                "<2,55>": "",
 | 
			
		||||
                "<2,56>": "",
 | 
			
		||||
                "<2,57>": "",
 | 
			
		||||
                "<2,58>": "",
 | 
			
		||||
                "<2,59>": "",
 | 
			
		||||
                "<2,60>": "",
 | 
			
		||||
                "<2,61>": "",
 | 
			
		||||
                "<2,62>": "0",
 | 
			
		||||
                "<2,63>": "",
 | 
			
		||||
                "<2,64>": {
 | 
			
		||||
                    "<2,64,1>": "-2",
 | 
			
		||||
                    "<2,64,2>": "-2",
 | 
			
		||||
                    "<2,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,65>": "-2",
 | 
			
		||||
                "<2,66>": "",
 | 
			
		||||
                "<2,67>": "",
 | 
			
		||||
                "<2,68>": "",
 | 
			
		||||
                "<2,69>": "",
 | 
			
		||||
                "<2,70>": "",
 | 
			
		||||
                "<2,71>": "",
 | 
			
		||||
                "<2,72>": "",
 | 
			
		||||
                "<2,73>": "",
 | 
			
		||||
                "<2,74>": "",
 | 
			
		||||
                "<2,75>": "",
 | 
			
		||||
                "<2,76>": "",
 | 
			
		||||
                "<2,77>": "",
 | 
			
		||||
                "<2,78>": "",
 | 
			
		||||
                "<2,79>": "",
 | 
			
		||||
                "<2,80>": "",
 | 
			
		||||
                "<2,81>": "",
 | 
			
		||||
                "<2,82>": "",
 | 
			
		||||
                "<2,83>": "",
 | 
			
		||||
                "<2,84>": "",
 | 
			
		||||
                "<2,85>": "",
 | 
			
		||||
                "<2,86>": "",
 | 
			
		||||
                "<2,87>": "",
 | 
			
		||||
                "<2,88>": "",
 | 
			
		||||
                "<2,89>": "",
 | 
			
		||||
                "<2,90>": "0",
 | 
			
		||||
                "<2,91>": "0",
 | 
			
		||||
                "<2,92>": "",
 | 
			
		||||
                "<2,93>": "",
 | 
			
		||||
                "<2,94>": "",
 | 
			
		||||
                "<2,95>": "",
 | 
			
		||||
                "<2,96>": "",
 | 
			
		||||
                "<2,97>": "",
 | 
			
		||||
                "<2,98>": "",
 | 
			
		||||
                "<2,99>": "",
 | 
			
		||||
                "<2,100>": "",
 | 
			
		||||
                "<2,101>": "",
 | 
			
		||||
                "<2,102>": "",
 | 
			
		||||
                "<2,103>": "",
 | 
			
		||||
                "<2,104>": "",
 | 
			
		||||
                "<2,105>": "",
 | 
			
		||||
                "<2,106>": "",
 | 
			
		||||
                "<2,107>": "",
 | 
			
		||||
                "<2,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<3>": {
 | 
			
		||||
                "<3,1>": "PUB_CANCEL",
 | 
			
		||||
                "<3,2>": "",
 | 
			
		||||
                "<3,3>": "PUSHBUTTON",
 | 
			
		||||
                "<3,4>": "NDW_ACKNOWLEDGE_MESSAGE",
 | 
			
		||||
                "<3,5>": "-97",
 | 
			
		||||
                "<3,6>": "-37",
 | 
			
		||||
                "<3,7>": "80",
 | 
			
		||||
                "<3,8>": "24",
 | 
			
		||||
                "<3,9>": "&Cancel",
 | 
			
		||||
                "<3,10>": {
 | 
			
		||||
                    "<3,10,1>": "0x56000300",
 | 
			
		||||
                    "<3,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,11>": {
 | 
			
		||||
                    "<3,11,1>": "0x3002",
 | 
			
		||||
                    "<3,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,12>": "2",
 | 
			
		||||
                "<3,13>": {
 | 
			
		||||
                    "<3,13,1>": "-2",
 | 
			
		||||
                    "<3,13,2>": "-2",
 | 
			
		||||
                    "<3,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,14>": "-2",
 | 
			
		||||
                "<3,15>": {
 | 
			
		||||
                    "<3,15,1>": {
 | 
			
		||||
                        "<3,15,1,1>": "Segoe UI",
 | 
			
		||||
                        "<3,15,1,2>": "-12",
 | 
			
		||||
                        "<3,15,1,3>": "400",
 | 
			
		||||
                        "<3,15,1,4>": "0",
 | 
			
		||||
                        "<3,15,1,5>": "0",
 | 
			
		||||
                        "<3,15,1,6>": "0",
 | 
			
		||||
                        "<3,15,1,7>": "1",
 | 
			
		||||
                        "<3,15,1,8>": "0",
 | 
			
		||||
                        "<3,15,1,9>": "0",
 | 
			
		||||
                        "<3,15,1,10>": "0",
 | 
			
		||||
                        "<3,15,1,11>": "0",
 | 
			
		||||
                        "<3,15,1,12>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,16>": "",
 | 
			
		||||
                "<3,17>": "",
 | 
			
		||||
                "<3,18>": {
 | 
			
		||||
                    "<3,18,1>": {
 | 
			
		||||
                        "<3,18,1,1>": "X",
 | 
			
		||||
                        "<3,18,1,2>": "EXECUTE",
 | 
			
		||||
                        "<3,18,1,3>": "@WINDOW_EVENTS",
 | 
			
		||||
                        "<3,18,1,4>": {
 | 
			
		||||
                            "<3,18,1,4,1>": "@SELF",
 | 
			
		||||
                            "<3,18,1,4,2>": "@EVENT",
 | 
			
		||||
                            "<3,18,1,4,3>": "@PARAM1",
 | 
			
		||||
                            "<3,18,1,4,4>": "@PARAM2",
 | 
			
		||||
                            "<3,18,1,4,5>": "@PARAM3",
 | 
			
		||||
                            "<3,18,1,4,6>": "@PARAM4",
 | 
			
		||||
                            "<3,18,1,4,7>": "@PARAM5",
 | 
			
		||||
                            "<3,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<3,18,1,5>": "",
 | 
			
		||||
                        "<3,18,1,6>": "",
 | 
			
		||||
                        "<3,18,1,7>": "",
 | 
			
		||||
                        "<3,18,1,8>": "",
 | 
			
		||||
                        "<3,18,1,9>": "",
 | 
			
		||||
                        "<3,18,1,10>": "",
 | 
			
		||||
                        "<3,18,1,11>": "",
 | 
			
		||||
                        "<3,18,1,12>": "",
 | 
			
		||||
                        "<3,18,1,13>": "",
 | 
			
		||||
                        "<3,18,1,14>": "",
 | 
			
		||||
                        "<3,18,1,15>": "COMMEVT",
 | 
			
		||||
                        "<3,18,1,16>": "0"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,19>": "CLICK",
 | 
			
		||||
                "<3,20>": "",
 | 
			
		||||
                "<3,21>": "",
 | 
			
		||||
                "<3,22>": "",
 | 
			
		||||
                "<3,23>": "",
 | 
			
		||||
                "<3,24>": "",
 | 
			
		||||
                "<3,25>": "",
 | 
			
		||||
                "<3,26>": "",
 | 
			
		||||
                "<3,27>": "",
 | 
			
		||||
                "<3,28>": "",
 | 
			
		||||
                "<3,29>": "",
 | 
			
		||||
                "<3,30>": "",
 | 
			
		||||
                "<3,31>": "",
 | 
			
		||||
                "<3,32>": "",
 | 
			
		||||
                "<3,33>": "",
 | 
			
		||||
                "<3,34>": "",
 | 
			
		||||
                "<3,35>": "",
 | 
			
		||||
                "<3,36>": "",
 | 
			
		||||
                "<3,37>": "",
 | 
			
		||||
                "<3,38>": "",
 | 
			
		||||
                "<3,39>": "",
 | 
			
		||||
                "<3,40>": "-1",
 | 
			
		||||
                "<3,41>": {
 | 
			
		||||
                    "<3,41,1>": "",
 | 
			
		||||
                    "<3,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,42>": "",
 | 
			
		||||
                "<3,43>": "",
 | 
			
		||||
                "<3,44>": "",
 | 
			
		||||
                "<3,45>": "",
 | 
			
		||||
                "<3,46>": "",
 | 
			
		||||
                "<3,47>": "",
 | 
			
		||||
                "<3,48>": "",
 | 
			
		||||
                "<3,49>": "",
 | 
			
		||||
                "<3,50>": "",
 | 
			
		||||
                "<3,51>": "",
 | 
			
		||||
                "<3,52>": "",
 | 
			
		||||
                "<3,53>": "",
 | 
			
		||||
                "<3,54>": "",
 | 
			
		||||
                "<3,55>": "",
 | 
			
		||||
                "<3,56>": "",
 | 
			
		||||
                "<3,57>": "",
 | 
			
		||||
                "<3,58>": "",
 | 
			
		||||
                "<3,59>": "",
 | 
			
		||||
                "<3,60>": "",
 | 
			
		||||
                "<3,61>": "",
 | 
			
		||||
                "<3,62>": "0",
 | 
			
		||||
                "<3,63>": "",
 | 
			
		||||
                "<3,64>": {
 | 
			
		||||
                    "<3,64,1>": "-2",
 | 
			
		||||
                    "<3,64,2>": "-2",
 | 
			
		||||
                    "<3,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,65>": "-2",
 | 
			
		||||
                "<3,66>": "",
 | 
			
		||||
                "<3,67>": "",
 | 
			
		||||
                "<3,68>": "",
 | 
			
		||||
                "<3,69>": "",
 | 
			
		||||
                "<3,70>": "",
 | 
			
		||||
                "<3,71>": "",
 | 
			
		||||
                "<3,72>": "",
 | 
			
		||||
                "<3,73>": "",
 | 
			
		||||
                "<3,74>": "",
 | 
			
		||||
                "<3,75>": "",
 | 
			
		||||
                "<3,76>": "",
 | 
			
		||||
                "<3,77>": "",
 | 
			
		||||
                "<3,78>": "",
 | 
			
		||||
                "<3,79>": "",
 | 
			
		||||
                "<3,80>": "",
 | 
			
		||||
                "<3,81>": "",
 | 
			
		||||
                "<3,82>": "",
 | 
			
		||||
                "<3,83>": "",
 | 
			
		||||
                "<3,84>": "",
 | 
			
		||||
                "<3,85>": "",
 | 
			
		||||
                "<3,86>": "",
 | 
			
		||||
                "<3,87>": "",
 | 
			
		||||
                "<3,88>": "",
 | 
			
		||||
                "<3,89>": "",
 | 
			
		||||
                "<3,90>": "0",
 | 
			
		||||
                "<3,91>": "0",
 | 
			
		||||
                "<3,92>": "",
 | 
			
		||||
                "<3,93>": "",
 | 
			
		||||
                "<3,94>": "",
 | 
			
		||||
                "<3,95>": "",
 | 
			
		||||
                "<3,96>": "",
 | 
			
		||||
                "<3,97>": "",
 | 
			
		||||
                "<3,98>": "",
 | 
			
		||||
                "<3,99>": "",
 | 
			
		||||
                "<3,100>": "",
 | 
			
		||||
                "<3,101>": "",
 | 
			
		||||
                "<3,102>": "",
 | 
			
		||||
                "<3,103>": "",
 | 
			
		||||
                "<3,104>": "",
 | 
			
		||||
                "<3,105>": "",
 | 
			
		||||
                "<3,106>": "",
 | 
			
		||||
                "<3,107>": "",
 | 
			
		||||
                "<3,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record4": {
 | 
			
		||||
            "<1>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -2738,7 +2738,7 @@
 | 
			
		||||
                    "<1,1,6>": "",
 | 
			
		||||
                    "<1,1,7>": "",
 | 
			
		||||
                    "<1,1,8>": "",
 | 
			
		||||
                    "<1,1,9>": "273"
 | 
			
		||||
                    "<1,1,9>": "274"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,2>": {
 | 
			
		||||
                    "<1,2,1>": "POPUP",
 | 
			
		||||
@ -7802,7 +7802,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                "<1,232>": {
 | 
			
		||||
                    "<1,232,1>": "POPUP",
 | 
			
		||||
                    "<1,232,2>": "8",
 | 
			
		||||
                    "<1,232,2>": "9",
 | 
			
		||||
                    "<1,232,3>": "ADM.TOOLS",
 | 
			
		||||
                    "<1,232,4>": "Tools",
 | 
			
		||||
                    "<1,232,5>": "0",
 | 
			
		||||
@ -7999,15 +7999,15 @@
 | 
			
		||||
                    "<1,240,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,241>": {
 | 
			
		||||
                    "<1,241,1>": "POPUP",
 | 
			
		||||
                    "<1,241,2>": "3",
 | 
			
		||||
                    "<1,241,3>": "ADM.WAREHOUSE",
 | 
			
		||||
                    "<1,241,4>": "Warehouse",
 | 
			
		||||
                    "<1,241,1>": "ITEM",
 | 
			
		||||
                    "<1,241,2>": "",
 | 
			
		||||
                    "<1,241,3>": "ADM.TOOLS.PRS_STAGE_DEFAULTS",
 | 
			
		||||
                    "<1,241,4>": "PRS Stage Defaults",
 | 
			
		||||
                    "<1,241,5>": "0",
 | 
			
		||||
                    "<1,241,6>": "0",
 | 
			
		||||
                    "<1,241,7>": "0",
 | 
			
		||||
                    "<1,241,8>": "0",
 | 
			
		||||
                    "<1,241,9>": "Warehouse and Location Setup",
 | 
			
		||||
                    "<1,241,9>": "",
 | 
			
		||||
                    "<1,241,10>": "",
 | 
			
		||||
                    "<1,241,11>": "0",
 | 
			
		||||
                    "<1,241,12>": "",
 | 
			
		||||
@ -8017,19 +8017,18 @@
 | 
			
		||||
                    "<1,241,16>": "",
 | 
			
		||||
                    "<1,241,17>": "",
 | 
			
		||||
                    "<1,241,18>": "",
 | 
			
		||||
                    "<1,241,19>": "",
 | 
			
		||||
                    "<1,241,20>": ""
 | 
			
		||||
                    "<1,241,19>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,242>": {
 | 
			
		||||
                    "<1,242,1>": "ITEM",
 | 
			
		||||
                    "<1,242,2>": "",
 | 
			
		||||
                    "<1,242,3>": "ADM.WH.LOCATION",
 | 
			
		||||
                    "<1,242,4>": "Location",
 | 
			
		||||
                    "<1,242,1>": "POPUP",
 | 
			
		||||
                    "<1,242,2>": "3",
 | 
			
		||||
                    "<1,242,3>": "ADM.WAREHOUSE",
 | 
			
		||||
                    "<1,242,4>": "Warehouse",
 | 
			
		||||
                    "<1,242,5>": "0",
 | 
			
		||||
                    "<1,242,6>": "0",
 | 
			
		||||
                    "<1,242,7>": "0",
 | 
			
		||||
                    "<1,242,8>": "0",
 | 
			
		||||
                    "<1,242,9>": "Inventory Locations",
 | 
			
		||||
                    "<1,242,9>": "Warehouse and Location Setup",
 | 
			
		||||
                    "<1,242,10>": "",
 | 
			
		||||
                    "<1,242,11>": "0",
 | 
			
		||||
                    "<1,242,12>": "",
 | 
			
		||||
@ -8045,13 +8044,13 @@
 | 
			
		||||
                "<1,243>": {
 | 
			
		||||
                    "<1,243,1>": "ITEM",
 | 
			
		||||
                    "<1,243,2>": "",
 | 
			
		||||
                    "<1,243,3>": "ADM.WH.WAREHOUSE",
 | 
			
		||||
                    "<1,243,4>": "Warehouse",
 | 
			
		||||
                    "<1,243,3>": "ADM.WH.LOCATION",
 | 
			
		||||
                    "<1,243,4>": "Location",
 | 
			
		||||
                    "<1,243,5>": "0",
 | 
			
		||||
                    "<1,243,6>": "0",
 | 
			
		||||
                    "<1,243,7>": "0",
 | 
			
		||||
                    "<1,243,8>": "0",
 | 
			
		||||
                    "<1,243,9>": "Warehouse Information",
 | 
			
		||||
                    "<1,243,9>": "Inventory Locations",
 | 
			
		||||
                    "<1,243,10>": "",
 | 
			
		||||
                    "<1,243,11>": "0",
 | 
			
		||||
                    "<1,243,12>": "",
 | 
			
		||||
@ -8067,13 +8066,13 @@
 | 
			
		||||
                "<1,244>": {
 | 
			
		||||
                    "<1,244,1>": "ITEM",
 | 
			
		||||
                    "<1,244,2>": "",
 | 
			
		||||
                    "<1,244,3>": "ADM.WH.GENERIC_BAR_CODE_LABEL",
 | 
			
		||||
                    "<1,244,4>": "Generic Bar Code Label",
 | 
			
		||||
                    "<1,244,3>": "ADM.WH.WAREHOUSE",
 | 
			
		||||
                    "<1,244,4>": "Warehouse",
 | 
			
		||||
                    "<1,244,5>": "0",
 | 
			
		||||
                    "<1,244,6>": "0",
 | 
			
		||||
                    "<1,244,7>": "0",
 | 
			
		||||
                    "<1,244,8>": "0",
 | 
			
		||||
                    "<1,244,9>": "Print Generic Bar Code Label",
 | 
			
		||||
                    "<1,244,9>": "Warehouse Information",
 | 
			
		||||
                    "<1,244,10>": "",
 | 
			
		||||
                    "<1,244,11>": "0",
 | 
			
		||||
                    "<1,244,12>": "",
 | 
			
		||||
@ -8089,13 +8088,13 @@
 | 
			
		||||
                "<1,245>": {
 | 
			
		||||
                    "<1,245,1>": "ITEM",
 | 
			
		||||
                    "<1,245,2>": "",
 | 
			
		||||
                    "<1,245,3>": "ADM.NIGHTLY_PROCESS_SETUP",
 | 
			
		||||
                    "<1,245,4>": "&Nightly Process Setup",
 | 
			
		||||
                    "<1,245,3>": "ADM.WH.GENERIC_BAR_CODE_LABEL",
 | 
			
		||||
                    "<1,245,4>": "Generic Bar Code Label",
 | 
			
		||||
                    "<1,245,5>": "0",
 | 
			
		||||
                    "<1,245,6>": "0",
 | 
			
		||||
                    "<1,245,7>": "1",
 | 
			
		||||
                    "<1,245,7>": "0",
 | 
			
		||||
                    "<1,245,8>": "0",
 | 
			
		||||
                    "<1,245,9>": "",
 | 
			
		||||
                    "<1,245,9>": "Print Generic Bar Code Label",
 | 
			
		||||
                    "<1,245,10>": "",
 | 
			
		||||
                    "<1,245,11>": "0",
 | 
			
		||||
                    "<1,245,12>": "",
 | 
			
		||||
@ -8111,8 +8110,8 @@
 | 
			
		||||
                "<1,246>": {
 | 
			
		||||
                    "<1,246,1>": "ITEM",
 | 
			
		||||
                    "<1,246,2>": "",
 | 
			
		||||
                    "<1,246,3>": "ADM.RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                    "<1,246,4>": "&Run Nightly Process",
 | 
			
		||||
                    "<1,246,3>": "ADM.NIGHTLY_PROCESS_SETUP",
 | 
			
		||||
                    "<1,246,4>": "&Nightly Process Setup",
 | 
			
		||||
                    "<1,246,5>": "0",
 | 
			
		||||
                    "<1,246,6>": "0",
 | 
			
		||||
                    "<1,246,7>": "1",
 | 
			
		||||
@ -8133,13 +8132,13 @@
 | 
			
		||||
                "<1,247>": {
 | 
			
		||||
                    "<1,247,1>": "ITEM",
 | 
			
		||||
                    "<1,247,2>": "",
 | 
			
		||||
                    "<1,247,3>": "ADMI.CUST_PROD_TEST_WAFER",
 | 
			
		||||
                    "<1,247,4>": "Customer Prod Test Wafer",
 | 
			
		||||
                    "<1,247,3>": "ADM.RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                    "<1,247,4>": "&Run Nightly Process",
 | 
			
		||||
                    "<1,247,5>": "0",
 | 
			
		||||
                    "<1,247,6>": "0",
 | 
			
		||||
                    "<1,247,7>": "1",
 | 
			
		||||
                    "<1,247,8>": "0",
 | 
			
		||||
                    "<1,247,9>": "Enter or Update Customer Product Test Wafer Part Numbers",
 | 
			
		||||
                    "<1,247,9>": "",
 | 
			
		||||
                    "<1,247,10>": "",
 | 
			
		||||
                    "<1,247,11>": "0",
 | 
			
		||||
                    "<1,247,12>": "",
 | 
			
		||||
@ -8153,15 +8152,15 @@
 | 
			
		||||
                    "<1,247,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,248>": {
 | 
			
		||||
                    "<1,248,1>": "POPUP",
 | 
			
		||||
                    "<1,248,2>": "2",
 | 
			
		||||
                    "<1,248,3>": "ADM.THRUPUT_TARGETS",
 | 
			
		||||
                    "<1,248,4>": "&ThruPut Targets",
 | 
			
		||||
                    "<1,248,1>": "ITEM",
 | 
			
		||||
                    "<1,248,2>": "",
 | 
			
		||||
                    "<1,248,3>": "ADMI.CUST_PROD_TEST_WAFER",
 | 
			
		||||
                    "<1,248,4>": "Customer Prod Test Wafer",
 | 
			
		||||
                    "<1,248,5>": "0",
 | 
			
		||||
                    "<1,248,6>": "0",
 | 
			
		||||
                    "<1,248,7>": "0",
 | 
			
		||||
                    "<1,248,7>": "1",
 | 
			
		||||
                    "<1,248,8>": "0",
 | 
			
		||||
                    "<1,248,9>": "ThruPut Target Config",
 | 
			
		||||
                    "<1,248,9>": "Enter or Update Customer Product Test Wafer Part Numbers",
 | 
			
		||||
                    "<1,248,10>": "",
 | 
			
		||||
                    "<1,248,11>": "0",
 | 
			
		||||
                    "<1,248,12>": "",
 | 
			
		||||
@ -8175,15 +8174,15 @@
 | 
			
		||||
                    "<1,248,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,249>": {
 | 
			
		||||
                    "<1,249,1>": "ITEM",
 | 
			
		||||
                    "<1,249,2>": "",
 | 
			
		||||
                    "<1,249,3>": "ADM.THRUPUT_TARGETS.FISCAL_YEAR",
 | 
			
		||||
                    "<1,249,4>": "Fiscal Year",
 | 
			
		||||
                    "<1,249,1>": "POPUP",
 | 
			
		||||
                    "<1,249,2>": "2",
 | 
			
		||||
                    "<1,249,3>": "ADM.THRUPUT_TARGETS",
 | 
			
		||||
                    "<1,249,4>": "&ThruPut Targets",
 | 
			
		||||
                    "<1,249,5>": "0",
 | 
			
		||||
                    "<1,249,6>": "0",
 | 
			
		||||
                    "<1,249,7>": "0",
 | 
			
		||||
                    "<1,249,8>": "0",
 | 
			
		||||
                    "<1,249,9>": "Enter Fiscal Year Dates",
 | 
			
		||||
                    "<1,249,9>": "ThruPut Target Config",
 | 
			
		||||
                    "<1,249,10>": "",
 | 
			
		||||
                    "<1,249,11>": "0",
 | 
			
		||||
                    "<1,249,12>": "",
 | 
			
		||||
@ -8199,13 +8198,13 @@
 | 
			
		||||
                "<1,250>": {
 | 
			
		||||
                    "<1,250,1>": "ITEM",
 | 
			
		||||
                    "<1,250,2>": "",
 | 
			
		||||
                    "<1,250,3>": "ADM.THRUPUT_TARGETS.FISCAL_QUARTER",
 | 
			
		||||
                    "<1,250,4>": "Fiscal Quarter",
 | 
			
		||||
                    "<1,250,3>": "ADM.THRUPUT_TARGETS.FISCAL_YEAR",
 | 
			
		||||
                    "<1,250,4>": "Fiscal Year",
 | 
			
		||||
                    "<1,250,5>": "0",
 | 
			
		||||
                    "<1,250,6>": "0",
 | 
			
		||||
                    "<1,250,7>": "0",
 | 
			
		||||
                    "<1,250,8>": "0",
 | 
			
		||||
                    "<1,250,9>": "Enter Fiscal Quarter Targets",
 | 
			
		||||
                    "<1,250,9>": "Enter Fiscal Year Dates",
 | 
			
		||||
                    "<1,250,10>": "",
 | 
			
		||||
                    "<1,250,11>": "0",
 | 
			
		||||
                    "<1,250,12>": "",
 | 
			
		||||
@ -8219,15 +8218,15 @@
 | 
			
		||||
                    "<1,250,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,251>": {
 | 
			
		||||
                    "<1,251,1>": "POPUP",
 | 
			
		||||
                    "<1,251,2>": "4",
 | 
			
		||||
                    "<1,251,3>": "ADM.RAS",
 | 
			
		||||
                    "<1,251,4>": "NCR Setup",
 | 
			
		||||
                    "<1,251,1>": "ITEM",
 | 
			
		||||
                    "<1,251,2>": "",
 | 
			
		||||
                    "<1,251,3>": "ADM.THRUPUT_TARGETS.FISCAL_QUARTER",
 | 
			
		||||
                    "<1,251,4>": "Fiscal Quarter",
 | 
			
		||||
                    "<1,251,5>": "0",
 | 
			
		||||
                    "<1,251,6>": "0",
 | 
			
		||||
                    "<1,251,7>": "0",
 | 
			
		||||
                    "<1,251,8>": "0",
 | 
			
		||||
                    "<1,251,9>": "Rejected Wafer Setup ",
 | 
			
		||||
                    "<1,251,9>": "Enter Fiscal Quarter Targets",
 | 
			
		||||
                    "<1,251,10>": "",
 | 
			
		||||
                    "<1,251,11>": "0",
 | 
			
		||||
                    "<1,251,12>": "",
 | 
			
		||||
@ -8241,15 +8240,15 @@
 | 
			
		||||
                    "<1,251,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,252>": {
 | 
			
		||||
                    "<1,252,1>": "ITEM",
 | 
			
		||||
                    "<1,252,2>": "",
 | 
			
		||||
                    "<1,252,3>": "ADM.RAS.AC",
 | 
			
		||||
                    "<1,252,4>": "&Assignable Causes",
 | 
			
		||||
                    "<1,252,1>": "POPUP",
 | 
			
		||||
                    "<1,252,2>": "4",
 | 
			
		||||
                    "<1,252,3>": "ADM.RAS",
 | 
			
		||||
                    "<1,252,4>": "NCR Setup",
 | 
			
		||||
                    "<1,252,5>": "0",
 | 
			
		||||
                    "<1,252,6>": "0",
 | 
			
		||||
                    "<1,252,7>": "0",
 | 
			
		||||
                    "<1,252,8>": "0",
 | 
			
		||||
                    "<1,252,9>": "Assignable Cause Setup",
 | 
			
		||||
                    "<1,252,9>": "Rejected Wafer Setup ",
 | 
			
		||||
                    "<1,252,10>": "",
 | 
			
		||||
                    "<1,252,11>": "0",
 | 
			
		||||
                    "<1,252,12>": "",
 | 
			
		||||
@ -8265,13 +8264,13 @@
 | 
			
		||||
                "<1,253>": {
 | 
			
		||||
                    "<1,253,1>": "ITEM",
 | 
			
		||||
                    "<1,253,2>": "",
 | 
			
		||||
                    "<1,253,3>": "ADM.RAS.DE_GROUPS",
 | 
			
		||||
                    "<1,253,4>": "&Designation Error Groups",
 | 
			
		||||
                    "<1,253,3>": "ADM.RAS.AC",
 | 
			
		||||
                    "<1,253,4>": "&Assignable Causes",
 | 
			
		||||
                    "<1,253,5>": "0",
 | 
			
		||||
                    "<1,253,6>": "0",
 | 
			
		||||
                    "<1,253,7>": "0",
 | 
			
		||||
                    "<1,253,8>": "0",
 | 
			
		||||
                    "<1,253,9>": "Error Group Setup",
 | 
			
		||||
                    "<1,253,9>": "Assignable Cause Setup",
 | 
			
		||||
                    "<1,253,10>": "",
 | 
			
		||||
                    "<1,253,11>": "0",
 | 
			
		||||
                    "<1,253,12>": "",
 | 
			
		||||
@ -8287,13 +8286,13 @@
 | 
			
		||||
                "<1,254>": {
 | 
			
		||||
                    "<1,254,1>": "ITEM",
 | 
			
		||||
                    "<1,254,2>": "",
 | 
			
		||||
                    "<1,254,3>": "ADM.RAS.LOSS_CODES",
 | 
			
		||||
                    "<1,254,4>": "&Loss Codes",
 | 
			
		||||
                    "<1,254,3>": "ADM.RAS.DE_GROUPS",
 | 
			
		||||
                    "<1,254,4>": "&Designation Error Groups",
 | 
			
		||||
                    "<1,254,5>": "0",
 | 
			
		||||
                    "<1,254,6>": "0",
 | 
			
		||||
                    "<1,254,7>": "0",
 | 
			
		||||
                    "<1,254,8>": "0",
 | 
			
		||||
                    "<1,254,9>": "Loss Code Setup",
 | 
			
		||||
                    "<1,254,9>": "Error Group Setup",
 | 
			
		||||
                    "<1,254,10>": "",
 | 
			
		||||
                    "<1,254,11>": "0",
 | 
			
		||||
                    "<1,254,12>": "",
 | 
			
		||||
@ -8309,13 +8308,13 @@
 | 
			
		||||
                "<1,255>": {
 | 
			
		||||
                    "<1,255,1>": "ITEM",
 | 
			
		||||
                    "<1,255,2>": "",
 | 
			
		||||
                    "<1,255,3>": "ADM.TEST_WFR_USE_CD",
 | 
			
		||||
                    "<1,255,4>": "&Test Wafer Usage Codes",
 | 
			
		||||
                    "<1,255,3>": "ADM.RAS.LOSS_CODES",
 | 
			
		||||
                    "<1,255,4>": "&Loss Codes",
 | 
			
		||||
                    "<1,255,5>": "0",
 | 
			
		||||
                    "<1,255,6>": "0",
 | 
			
		||||
                    "<1,255,7>": "1",
 | 
			
		||||
                    "<1,255,7>": "0",
 | 
			
		||||
                    "<1,255,8>": "0",
 | 
			
		||||
                    "<1,255,9>": "",
 | 
			
		||||
                    "<1,255,9>": "Loss Code Setup",
 | 
			
		||||
                    "<1,255,10>": "",
 | 
			
		||||
                    "<1,255,11>": "0",
 | 
			
		||||
                    "<1,255,12>": "",
 | 
			
		||||
@ -8329,15 +8328,15 @@
 | 
			
		||||
                    "<1,255,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,256>": {
 | 
			
		||||
                    "<1,256,1>": "POPUP",
 | 
			
		||||
                    "<1,256,2>": "11",
 | 
			
		||||
                    "<1,256,3>": "ADM.DEVELOPER",
 | 
			
		||||
                    "<1,256,4>": "Developer",
 | 
			
		||||
                    "<1,256,1>": "ITEM",
 | 
			
		||||
                    "<1,256,2>": "",
 | 
			
		||||
                    "<1,256,3>": "ADM.TEST_WFR_USE_CD",
 | 
			
		||||
                    "<1,256,4>": "&Test Wafer Usage Codes",
 | 
			
		||||
                    "<1,256,5>": "0",
 | 
			
		||||
                    "<1,256,6>": "0",
 | 
			
		||||
                    "<1,256,7>": "0",
 | 
			
		||||
                    "<1,256,7>": "1",
 | 
			
		||||
                    "<1,256,8>": "0",
 | 
			
		||||
                    "<1,256,9>": "Developer and System Support Menu",
 | 
			
		||||
                    "<1,256,9>": "",
 | 
			
		||||
                    "<1,256,10>": "",
 | 
			
		||||
                    "<1,256,11>": "0",
 | 
			
		||||
                    "<1,256,12>": "",
 | 
			
		||||
@ -8351,15 +8350,15 @@
 | 
			
		||||
                    "<1,256,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,257>": {
 | 
			
		||||
                    "<1,257,1>": "ITEM",
 | 
			
		||||
                    "<1,257,2>": "",
 | 
			
		||||
                    "<1,257,3>": "ADM.DEV.KEEP_ALIVES",
 | 
			
		||||
                    "<1,257,4>": "Keep Alives",
 | 
			
		||||
                    "<1,257,1>": "POPUP",
 | 
			
		||||
                    "<1,257,2>": "11",
 | 
			
		||||
                    "<1,257,3>": "ADM.DEVELOPER",
 | 
			
		||||
                    "<1,257,4>": "Developer",
 | 
			
		||||
                    "<1,257,5>": "0",
 | 
			
		||||
                    "<1,257,6>": "0",
 | 
			
		||||
                    "<1,257,7>": "0",
 | 
			
		||||
                    "<1,257,8>": "0",
 | 
			
		||||
                    "<1,257,9>": "",
 | 
			
		||||
                    "<1,257,9>": "Developer and System Support Menu",
 | 
			
		||||
                    "<1,257,10>": "",
 | 
			
		||||
                    "<1,257,11>": "0",
 | 
			
		||||
                    "<1,257,12>": "",
 | 
			
		||||
@ -8375,13 +8374,13 @@
 | 
			
		||||
                "<1,258>": {
 | 
			
		||||
                    "<1,258,1>": "ITEM",
 | 
			
		||||
                    "<1,258,2>": "",
 | 
			
		||||
                    "<1,258,3>": "ADMIN.DEVELOPER.MES_TASK",
 | 
			
		||||
                    "<1,258,4>": "MES Task",
 | 
			
		||||
                    "<1,258,3>": "ADM.DEV.KEEP_ALIVES",
 | 
			
		||||
                    "<1,258,4>": "Keep Alives",
 | 
			
		||||
                    "<1,258,5>": "0",
 | 
			
		||||
                    "<1,258,6>": "0",
 | 
			
		||||
                    "<1,258,7>": "0",
 | 
			
		||||
                    "<1,258,8>": "0",
 | 
			
		||||
                    "<1,258,9>": "Window for MES Task maintenenace.",
 | 
			
		||||
                    "<1,258,9>": "",
 | 
			
		||||
                    "<1,258,10>": "",
 | 
			
		||||
                    "<1,258,11>": "0",
 | 
			
		||||
                    "<1,258,12>": "",
 | 
			
		||||
@ -8397,13 +8396,13 @@
 | 
			
		||||
                "<1,259>": {
 | 
			
		||||
                    "<1,259,1>": "ITEM",
 | 
			
		||||
                    "<1,259,2>": "",
 | 
			
		||||
                    "<1,259,3>": "ADMIN.DEVELOPER.SRP_UTILITY",
 | 
			
		||||
                    "<1,259,4>": "SRP Utility\tCtrl+Shift+S",
 | 
			
		||||
                    "<1,259,3>": "ADMIN.DEVELOPER.MES_TASK",
 | 
			
		||||
                    "<1,259,4>": "MES Task",
 | 
			
		||||
                    "<1,259,5>": "0",
 | 
			
		||||
                    "<1,259,6>": "0",
 | 
			
		||||
                    "<1,259,7>": "1",
 | 
			
		||||
                    "<1,259,8>": "851",
 | 
			
		||||
                    "<1,259,9>": "",
 | 
			
		||||
                    "<1,259,7>": "0",
 | 
			
		||||
                    "<1,259,8>": "0",
 | 
			
		||||
                    "<1,259,9>": "Window for MES Task maintenenace.",
 | 
			
		||||
                    "<1,259,10>": "",
 | 
			
		||||
                    "<1,259,11>": "0",
 | 
			
		||||
                    "<1,259,12>": "",
 | 
			
		||||
@ -8419,12 +8418,12 @@
 | 
			
		||||
                "<1,260>": {
 | 
			
		||||
                    "<1,260,1>": "ITEM",
 | 
			
		||||
                    "<1,260,2>": "",
 | 
			
		||||
                    "<1,260,3>": "ADMIN.DEVELOPER.DICTIONARY_LISTINGS",
 | 
			
		||||
                    "<1,260,4>": "Dictionary Listings",
 | 
			
		||||
                    "<1,260,3>": "ADMIN.DEVELOPER.SRP_UTILITY",
 | 
			
		||||
                    "<1,260,4>": "SRP Utility\tCtrl+Shift+S",
 | 
			
		||||
                    "<1,260,5>": "0",
 | 
			
		||||
                    "<1,260,6>": "0",
 | 
			
		||||
                    "<1,260,7>": "0",
 | 
			
		||||
                    "<1,260,8>": "0",
 | 
			
		||||
                    "<1,260,7>": "1",
 | 
			
		||||
                    "<1,260,8>": "851",
 | 
			
		||||
                    "<1,260,9>": "",
 | 
			
		||||
                    "<1,260,10>": "",
 | 
			
		||||
                    "<1,260,11>": "0",
 | 
			
		||||
@ -8441,8 +8440,8 @@
 | 
			
		||||
                "<1,261>": {
 | 
			
		||||
                    "<1,261,1>": "ITEM",
 | 
			
		||||
                    "<1,261,2>": "",
 | 
			
		||||
                    "<1,261,3>": "ADM.DEVELOPER.INTERFACE_DICT_EXPORT",
 | 
			
		||||
                    "<1,261,4>": "Interface Dict Export",
 | 
			
		||||
                    "<1,261,3>": "ADMIN.DEVELOPER.DICTIONARY_LISTINGS",
 | 
			
		||||
                    "<1,261,4>": "Dictionary Listings",
 | 
			
		||||
                    "<1,261,5>": "0",
 | 
			
		||||
                    "<1,261,6>": "0",
 | 
			
		||||
                    "<1,261,7>": "0",
 | 
			
		||||
@ -8463,8 +8462,8 @@
 | 
			
		||||
                "<1,262>": {
 | 
			
		||||
                    "<1,262,1>": "ITEM",
 | 
			
		||||
                    "<1,262,2>": "",
 | 
			
		||||
                    "<1,262,3>": "ADMIN.DEVELOPER.THRUPUT_TEST",
 | 
			
		||||
                    "<1,262,4>": "Thruput Test",
 | 
			
		||||
                    "<1,262,3>": "ADM.DEVELOPER.INTERFACE_DICT_EXPORT",
 | 
			
		||||
                    "<1,262,4>": "Interface Dict Export",
 | 
			
		||||
                    "<1,262,5>": "0",
 | 
			
		||||
                    "<1,262,6>": "0",
 | 
			
		||||
                    "<1,262,7>": "0",
 | 
			
		||||
@ -8485,8 +8484,8 @@
 | 
			
		||||
                "<1,263>": {
 | 
			
		||||
                    "<1,263,1>": "ITEM",
 | 
			
		||||
                    "<1,263,2>": "",
 | 
			
		||||
                    "<1,263,3>": "ADMIN.DEVELOPER.AD_TEST",
 | 
			
		||||
                    "<1,263,4>": "AD Test",
 | 
			
		||||
                    "<1,263,3>": "ADMIN.DEVELOPER.THRUPUT_TEST",
 | 
			
		||||
                    "<1,263,4>": "Thruput Test",
 | 
			
		||||
                    "<1,263,5>": "0",
 | 
			
		||||
                    "<1,263,6>": "0",
 | 
			
		||||
                    "<1,263,7>": "0",
 | 
			
		||||
@ -8507,8 +8506,8 @@
 | 
			
		||||
                "<1,264>": {
 | 
			
		||||
                    "<1,264,1>": "ITEM",
 | 
			
		||||
                    "<1,264,2>": "",
 | 
			
		||||
                    "<1,264,3>": "ADMIN.DEVELOPER.SESSION_MANAGER",
 | 
			
		||||
                    "<1,264,4>": "Session Manager...",
 | 
			
		||||
                    "<1,264,3>": "ADMIN.DEVELOPER.AD_TEST",
 | 
			
		||||
                    "<1,264,4>": "AD Test",
 | 
			
		||||
                    "<1,264,5>": "0",
 | 
			
		||||
                    "<1,264,6>": "0",
 | 
			
		||||
                    "<1,264,7>": "0",
 | 
			
		||||
@ -8529,8 +8528,8 @@
 | 
			
		||||
                "<1,265>": {
 | 
			
		||||
                    "<1,265,1>": "ITEM",
 | 
			
		||||
                    "<1,265,2>": "",
 | 
			
		||||
                    "<1,265,3>": "ADMIN.DEVELOPER.WEBTEST",
 | 
			
		||||
                    "<1,265,4>": "WebTest",
 | 
			
		||||
                    "<1,265,3>": "ADMIN.DEVELOPER.SESSION_MANAGER",
 | 
			
		||||
                    "<1,265,4>": "Session Manager...",
 | 
			
		||||
                    "<1,265,5>": "0",
 | 
			
		||||
                    "<1,265,6>": "0",
 | 
			
		||||
                    "<1,265,7>": "0",
 | 
			
		||||
@ -8551,8 +8550,8 @@
 | 
			
		||||
                "<1,266>": {
 | 
			
		||||
                    "<1,266,1>": "ITEM",
 | 
			
		||||
                    "<1,266,2>": "",
 | 
			
		||||
                    "<1,266,3>": "ADMIN.DEVELOPER.ALL_REACTOR_MODES",
 | 
			
		||||
                    "<1,266,4>": "All Reactor Modes",
 | 
			
		||||
                    "<1,266,3>": "ADMIN.DEVELOPER.WEBTEST",
 | 
			
		||||
                    "<1,266,4>": "WebTest",
 | 
			
		||||
                    "<1,266,5>": "0",
 | 
			
		||||
                    "<1,266,6>": "0",
 | 
			
		||||
                    "<1,266,7>": "0",
 | 
			
		||||
@ -8571,15 +8570,15 @@
 | 
			
		||||
                    "<1,266,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,267>": {
 | 
			
		||||
                    "<1,267,1>": "POPUP",
 | 
			
		||||
                    "<1,267,2>": "2",
 | 
			
		||||
                    "<1,267,3>": "ADMIN.DEV.ARCHIVE",
 | 
			
		||||
                    "<1,267,4>": "Archive",
 | 
			
		||||
                    "<1,267,1>": "ITEM",
 | 
			
		||||
                    "<1,267,2>": "",
 | 
			
		||||
                    "<1,267,3>": "ADMIN.DEVELOPER.ALL_REACTOR_MODES",
 | 
			
		||||
                    "<1,267,4>": "All Reactor Modes",
 | 
			
		||||
                    "<1,267,5>": "0",
 | 
			
		||||
                    "<1,267,6>": "0",
 | 
			
		||||
                    "<1,267,7>": "0",
 | 
			
		||||
                    "<1,267,8>": "0",
 | 
			
		||||
                    "<1,267,9>": "Archived Records",
 | 
			
		||||
                    "<1,267,9>": "",
 | 
			
		||||
                    "<1,267,10>": "",
 | 
			
		||||
                    "<1,267,11>": "0",
 | 
			
		||||
                    "<1,267,12>": "",
 | 
			
		||||
@ -8593,15 +8592,15 @@
 | 
			
		||||
                    "<1,267,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,268>": {
 | 
			
		||||
                    "<1,268,1>": "ITEM",
 | 
			
		||||
                    "<1,268,2>": "",
 | 
			
		||||
                    "<1,268,3>": "ADM.DEV.ARCHIVE.AUDIT_TRAIL",
 | 
			
		||||
                    "<1,268,4>": "Audit Trail",
 | 
			
		||||
                    "<1,268,1>": "POPUP",
 | 
			
		||||
                    "<1,268,2>": "2",
 | 
			
		||||
                    "<1,268,3>": "ADMIN.DEV.ARCHIVE",
 | 
			
		||||
                    "<1,268,4>": "Archive",
 | 
			
		||||
                    "<1,268,5>": "0",
 | 
			
		||||
                    "<1,268,6>": "0",
 | 
			
		||||
                    "<1,268,7>": "0",
 | 
			
		||||
                    "<1,268,8>": "0",
 | 
			
		||||
                    "<1,268,9>": "Audit Manager Reporting",
 | 
			
		||||
                    "<1,268,9>": "Archived Records",
 | 
			
		||||
                    "<1,268,10>": "",
 | 
			
		||||
                    "<1,268,11>": "0",
 | 
			
		||||
                    "<1,268,12>": "",
 | 
			
		||||
@ -8617,13 +8616,13 @@
 | 
			
		||||
                "<1,269>": {
 | 
			
		||||
                    "<1,269,1>": "ITEM",
 | 
			
		||||
                    "<1,269,2>": "",
 | 
			
		||||
                    "<1,269,3>": "ADM.DEV.ARCHIVE.AUDIT_MANAGER",
 | 
			
		||||
                    "<1,269,4>": "Audit Manager",
 | 
			
		||||
                    "<1,269,3>": "ADM.DEV.ARCHIVE.AUDIT_TRAIL",
 | 
			
		||||
                    "<1,269,4>": "Audit Trail",
 | 
			
		||||
                    "<1,269,5>": "0",
 | 
			
		||||
                    "<1,269,6>": "0",
 | 
			
		||||
                    "<1,269,7>": "0",
 | 
			
		||||
                    "<1,269,8>": "0",
 | 
			
		||||
                    "<1,269,9>": "Audit Manager Setup",
 | 
			
		||||
                    "<1,269,9>": "Audit Manager Reporting",
 | 
			
		||||
                    "<1,269,10>": "",
 | 
			
		||||
                    "<1,269,11>": "0",
 | 
			
		||||
                    "<1,269,12>": "",
 | 
			
		||||
@ -8637,15 +8636,15 @@
 | 
			
		||||
                    "<1,269,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,270>": {
 | 
			
		||||
                    "<1,270,1>": "SEPARATOR",
 | 
			
		||||
                    "<1,270,1>": "ITEM",
 | 
			
		||||
                    "<1,270,2>": "",
 | 
			
		||||
                    "<1,270,3>": "ADMIN.SEP114",
 | 
			
		||||
                    "<1,270,4>": "SEP114",
 | 
			
		||||
                    "<1,270,3>": "ADM.DEV.ARCHIVE.AUDIT_MANAGER",
 | 
			
		||||
                    "<1,270,4>": "Audit Manager",
 | 
			
		||||
                    "<1,270,5>": "0",
 | 
			
		||||
                    "<1,270,6>": "0",
 | 
			
		||||
                    "<1,270,7>": "0",
 | 
			
		||||
                    "<1,270,8>": "0",
 | 
			
		||||
                    "<1,270,9>": "",
 | 
			
		||||
                    "<1,270,9>": "Audit Manager Setup",
 | 
			
		||||
                    "<1,270,10>": "",
 | 
			
		||||
                    "<1,270,11>": "0",
 | 
			
		||||
                    "<1,270,12>": "",
 | 
			
		||||
@ -8659,10 +8658,10 @@
 | 
			
		||||
                    "<1,270,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,271>": {
 | 
			
		||||
                    "<1,271,1>": "ITEM",
 | 
			
		||||
                    "<1,271,1>": "SEPARATOR",
 | 
			
		||||
                    "<1,271,2>": "",
 | 
			
		||||
                    "<1,271,3>": "ADMIN.MASS_TOOL_MODE_CHANGE",
 | 
			
		||||
                    "<1,271,4>": "Mass Tool Mode Change",
 | 
			
		||||
                    "<1,271,3>": "ADMIN.SEP114",
 | 
			
		||||
                    "<1,271,4>": "SEP114",
 | 
			
		||||
                    "<1,271,5>": "0",
 | 
			
		||||
                    "<1,271,6>": "0",
 | 
			
		||||
                    "<1,271,7>": "0",
 | 
			
		||||
@ -8683,8 +8682,8 @@
 | 
			
		||||
                "<1,272>": {
 | 
			
		||||
                    "<1,272,1>": "ITEM",
 | 
			
		||||
                    "<1,272,2>": "",
 | 
			
		||||
                    "<1,272,3>": "ADMIN.MASS_REACTOR_MODE_CHANGE",
 | 
			
		||||
                    "<1,272,4>": "Mass Reactor Mode Change",
 | 
			
		||||
                    "<1,272,3>": "ADMIN.MASS_TOOL_MODE_CHANGE",
 | 
			
		||||
                    "<1,272,4>": "Mass Tool Mode Change",
 | 
			
		||||
                    "<1,272,5>": "0",
 | 
			
		||||
                    "<1,272,6>": "0",
 | 
			
		||||
                    "<1,272,7>": "0",
 | 
			
		||||
@ -8705,8 +8704,8 @@
 | 
			
		||||
                "<1,273>": {
 | 
			
		||||
                    "<1,273,1>": "ITEM",
 | 
			
		||||
                    "<1,273,2>": "",
 | 
			
		||||
                    "<1,273,3>": "ADMIN.TOOLS_EVAC",
 | 
			
		||||
                    "<1,273,4>": "Tools Evac",
 | 
			
		||||
                    "<1,273,3>": "ADMIN.MASS_REACTOR_MODE_CHANGE",
 | 
			
		||||
                    "<1,273,4>": "Mass Reactor Mode Change",
 | 
			
		||||
                    "<1,273,5>": "0",
 | 
			
		||||
                    "<1,273,6>": "0",
 | 
			
		||||
                    "<1,273,7>": "0",
 | 
			
		||||
@ -8723,6 +8722,28 @@
 | 
			
		||||
                    "<1,273,18>": "",
 | 
			
		||||
                    "<1,273,19>": "",
 | 
			
		||||
                    "<1,273,20>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,274>": {
 | 
			
		||||
                    "<1,274,1>": "ITEM",
 | 
			
		||||
                    "<1,274,2>": "",
 | 
			
		||||
                    "<1,274,3>": "ADMIN.TOOLS_EVAC",
 | 
			
		||||
                    "<1,274,4>": "Tools Evac",
 | 
			
		||||
                    "<1,274,5>": "0",
 | 
			
		||||
                    "<1,274,6>": "0",
 | 
			
		||||
                    "<1,274,7>": "0",
 | 
			
		||||
                    "<1,274,8>": "0",
 | 
			
		||||
                    "<1,274,9>": "",
 | 
			
		||||
                    "<1,274,10>": "",
 | 
			
		||||
                    "<1,274,11>": "0",
 | 
			
		||||
                    "<1,274,12>": "",
 | 
			
		||||
                    "<1,274,13>": "",
 | 
			
		||||
                    "<1,274,14>": "",
 | 
			
		||||
                    "<1,274,15>": "",
 | 
			
		||||
                    "<1,274,16>": "",
 | 
			
		||||
                    "<1,274,17>": "",
 | 
			
		||||
                    "<1,274,18>": "",
 | 
			
		||||
                    "<1,274,19>": "",
 | 
			
		||||
                    "<1,274,20>": ""
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
@ -10964,7 +10985,17 @@
 | 
			
		||||
                            "<2,2,178,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,178,5>": "",
 | 
			
		||||
                        "<2,2,178,6>": ""
 | 
			
		||||
                        "<2,2,178,6>": "",
 | 
			
		||||
                        "<2,2,178,7>": "",
 | 
			
		||||
                        "<2,2,178,8>": "",
 | 
			
		||||
                        "<2,2,178,9>": "",
 | 
			
		||||
                        "<2,2,178,10>": "",
 | 
			
		||||
                        "<2,2,178,11>": "",
 | 
			
		||||
                        "<2,2,178,12>": "",
 | 
			
		||||
                        "<2,2,178,13>": "",
 | 
			
		||||
                        "<2,2,178,14>": "",
 | 
			
		||||
                        "<2,2,178,15>": "STARTWIN",
 | 
			
		||||
                        "<2,2,178,16>": "0"
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,179>": {
 | 
			
		||||
                        "<2,2,179,1>": "R",
 | 
			
		||||
@ -11032,25 +11063,45 @@
 | 
			
		||||
                        "<2,2,185,3>": "LSL2*STPROCEXE**PRINT_AKRION_TEST",
 | 
			
		||||
                        "<2,2,185,4>": "",
 | 
			
		||||
                        "<2,2,185,5>": "",
 | 
			
		||||
                        "<2,2,185,6>": ""
 | 
			
		||||
                        "<2,2,185,6>": "",
 | 
			
		||||
                        "<2,2,185,7>": "",
 | 
			
		||||
                        "<2,2,185,8>": "",
 | 
			
		||||
                        "<2,2,185,9>": "",
 | 
			
		||||
                        "<2,2,185,10>": "",
 | 
			
		||||
                        "<2,2,185,11>": "",
 | 
			
		||||
                        "<2,2,185,12>": "",
 | 
			
		||||
                        "<2,2,185,13>": "",
 | 
			
		||||
                        "<2,2,185,14>": "",
 | 
			
		||||
                        "<2,2,185,15>": "STPROC",
 | 
			
		||||
                        "<2,2,185,16>": "0"
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,186>": {
 | 
			
		||||
                        "<2,2,186,1>": "R",
 | 
			
		||||
                        "<2,2,186,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,186,3>": "LSL2*OIWINEXE**LOCATION",
 | 
			
		||||
                        "<2,2,186,3>": "LSL2*OIWINEXE**PRS_STAGE_DEFECT_DEFAULTS",
 | 
			
		||||
                        "<2,2,186,4>": {
 | 
			
		||||
                            "<2,2,186,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,186,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,186,5>": "",
 | 
			
		||||
                        "<2,2,186,6>": ""
 | 
			
		||||
                        "<2,2,186,6>": "",
 | 
			
		||||
                        "<2,2,186,7>": "",
 | 
			
		||||
                        "<2,2,186,8>": "",
 | 
			
		||||
                        "<2,2,186,9>": "",
 | 
			
		||||
                        "<2,2,186,10>": "",
 | 
			
		||||
                        "<2,2,186,11>": "",
 | 
			
		||||
                        "<2,2,186,12>": "",
 | 
			
		||||
                        "<2,2,186,13>": "",
 | 
			
		||||
                        "<2,2,186,14>": "",
 | 
			
		||||
                        "<2,2,186,15>": "STARTWIN",
 | 
			
		||||
                        "<2,2,186,16>": "0"
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,187>": {
 | 
			
		||||
                        "<2,2,187,1>": "R",
 | 
			
		||||
                        "<2,2,187,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,187,3>": "LSL2*OIWINEXE**WAREHOUSE",
 | 
			
		||||
                        "<2,2,187,3>": "LSL2*OIWINEXE**LOCATION",
 | 
			
		||||
                        "<2,2,187,4>": {
 | 
			
		||||
                            "<2,2,187,4,1>": "",
 | 
			
		||||
                            "<2,2,187,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,187,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,187,5>": "",
 | 
			
		||||
@ -11059,9 +11110,9 @@
 | 
			
		||||
                    "<2,2,188>": {
 | 
			
		||||
                        "<2,2,188,1>": "R",
 | 
			
		||||
                        "<2,2,188,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,188,3>": "LSL2*OIWINEXE**PRINT_GENERIC_BARCODE",
 | 
			
		||||
                        "<2,2,188,3>": "LSL2*OIWINEXE**WAREHOUSE",
 | 
			
		||||
                        "<2,2,188,4>": {
 | 
			
		||||
                            "<2,2,188,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,188,4,1>": "",
 | 
			
		||||
                            "<2,2,188,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,188,5>": "",
 | 
			
		||||
@ -11070,9 +11121,9 @@
 | 
			
		||||
                    "<2,2,189>": {
 | 
			
		||||
                        "<2,2,189,1>": "R",
 | 
			
		||||
                        "<2,2,189,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,189,3>": "LSL2*OIWINEXE**NIGHTLY_PROCESS",
 | 
			
		||||
                        "<2,2,189,3>": "LSL2*OIWINEXE**PRINT_GENERIC_BARCODE",
 | 
			
		||||
                        "<2,2,189,4>": {
 | 
			
		||||
                            "<2,2,189,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,189,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,189,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,189,5>": "",
 | 
			
		||||
@ -11081,7 +11132,7 @@
 | 
			
		||||
                    "<2,2,190>": {
 | 
			
		||||
                        "<2,2,190,1>": "R",
 | 
			
		||||
                        "<2,2,190,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,190,3>": "LSL2*OIWINEXE**RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                        "<2,2,190,3>": "LSL2*OIWINEXE**NIGHTLY_PROCESS",
 | 
			
		||||
                        "<2,2,190,4>": {
 | 
			
		||||
                            "<2,2,190,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,190,4,2>": "@WINDOW"
 | 
			
		||||
@ -11092,9 +11143,9 @@
 | 
			
		||||
                    "<2,2,191>": {
 | 
			
		||||
                        "<2,2,191,1>": "R",
 | 
			
		||||
                        "<2,2,191,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,191,3>": "LSL2*OIWINEXE**CUST_TW_PART",
 | 
			
		||||
                        "<2,2,191,3>": "LSL2*OIWINEXE**RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                        "<2,2,191,4>": {
 | 
			
		||||
                            "<2,2,191,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,191,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,191,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,191,5>": "",
 | 
			
		||||
@ -11103,7 +11154,7 @@
 | 
			
		||||
                    "<2,2,192>": {
 | 
			
		||||
                        "<2,2,192,1>": "R",
 | 
			
		||||
                        "<2,2,192,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,192,3>": "LSL2*OIWINEXE**FISCAL_YR",
 | 
			
		||||
                        "<2,2,192,3>": "LSL2*OIWINEXE**CUST_TW_PART",
 | 
			
		||||
                        "<2,2,192,4>": {
 | 
			
		||||
                            "<2,2,192,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,192,4,2>": "@WINDOW"
 | 
			
		||||
@ -11114,7 +11165,7 @@
 | 
			
		||||
                    "<2,2,193>": {
 | 
			
		||||
                        "<2,2,193,1>": "R",
 | 
			
		||||
                        "<2,2,193,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,193,3>": "LSL2*OIWINEXE**FISCAL_QTR",
 | 
			
		||||
                        "<2,2,193,3>": "LSL2*OIWINEXE**FISCAL_YR",
 | 
			
		||||
                        "<2,2,193,4>": {
 | 
			
		||||
                            "<2,2,193,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,193,4,2>": "@WINDOW"
 | 
			
		||||
@ -11125,9 +11176,9 @@
 | 
			
		||||
                    "<2,2,194>": {
 | 
			
		||||
                        "<2,2,194,1>": "R",
 | 
			
		||||
                        "<2,2,194,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,194,3>": "LSL2*OIWINEXE**ASSIGN_CAUSE",
 | 
			
		||||
                        "<2,2,194,3>": "LSL2*OIWINEXE**FISCAL_QTR",
 | 
			
		||||
                        "<2,2,194,4>": {
 | 
			
		||||
                            "<2,2,194,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,194,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,194,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,194,5>": "",
 | 
			
		||||
@ -11136,7 +11187,7 @@
 | 
			
		||||
                    "<2,2,195>": {
 | 
			
		||||
                        "<2,2,195,1>": "R",
 | 
			
		||||
                        "<2,2,195,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,195,3>": "LSL2*OIWINEXE**DESIG_ERR_GRP",
 | 
			
		||||
                        "<2,2,195,3>": "LSL2*OIWINEXE**ASSIGN_CAUSE",
 | 
			
		||||
                        "<2,2,195,4>": {
 | 
			
		||||
                            "<2,2,195,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,195,4,2>": "@WINDOW"
 | 
			
		||||
@ -11147,7 +11198,7 @@
 | 
			
		||||
                    "<2,2,196>": {
 | 
			
		||||
                        "<2,2,196,1>": "R",
 | 
			
		||||
                        "<2,2,196,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,196,3>": "LSL2*OIWINEXE**LOSS_CODES",
 | 
			
		||||
                        "<2,2,196,3>": "LSL2*OIWINEXE**DESIG_ERR_GRP",
 | 
			
		||||
                        "<2,2,196,4>": {
 | 
			
		||||
                            "<2,2,196,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,196,4,2>": "@WINDOW"
 | 
			
		||||
@ -11158,7 +11209,7 @@
 | 
			
		||||
                    "<2,2,197>": {
 | 
			
		||||
                        "<2,2,197,1>": "R",
 | 
			
		||||
                        "<2,2,197,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,197,3>": "LSL2*OIWINEXE**TW_CODES",
 | 
			
		||||
                        "<2,2,197,3>": "LSL2*OIWINEXE**LOSS_CODES",
 | 
			
		||||
                        "<2,2,197,4>": {
 | 
			
		||||
                            "<2,2,197,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,197,4,2>": "@WINDOW"
 | 
			
		||||
@ -11169,81 +11220,85 @@
 | 
			
		||||
                    "<2,2,198>": {
 | 
			
		||||
                        "<2,2,198,1>": "R",
 | 
			
		||||
                        "<2,2,198,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,198,3>": "LSL2*POPUP**KEEP_ALIVES",
 | 
			
		||||
                        "<2,2,198,4>": "@WINDOW",
 | 
			
		||||
                        "<2,2,198,3>": "LSL2*OIWINEXE**TW_CODES",
 | 
			
		||||
                        "<2,2,198,4>": {
 | 
			
		||||
                            "<2,2,198,4,1>": "*CENTER",
 | 
			
		||||
                            "<2,2,198,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,198,5>": "",
 | 
			
		||||
                        "<2,2,198,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,199>": {
 | 
			
		||||
                        "<2,2,199,1>": "R",
 | 
			
		||||
                        "<2,2,199,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,199,3>": "LSL2*OIWINEXE**MES_TASK",
 | 
			
		||||
                        "<2,2,199,4>": {
 | 
			
		||||
                            "<2,2,199,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,199,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,199,3>": "LSL2*POPUP**KEEP_ALIVES",
 | 
			
		||||
                        "<2,2,199,4>": "@WINDOW",
 | 
			
		||||
                        "<2,2,199,5>": "",
 | 
			
		||||
                        "<2,2,199,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,200>": {
 | 
			
		||||
                        "<2,2,200,1>": "R",
 | 
			
		||||
                        "<2,2,200,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,200,3>": "LSL2*STPROCEXE**SRP_UTILITY",
 | 
			
		||||
                        "<2,2,200,4>": "",
 | 
			
		||||
                        "<2,2,200,3>": "LSL2*OIWINEXE**MES_TASK",
 | 
			
		||||
                        "<2,2,200,4>": {
 | 
			
		||||
                            "<2,2,200,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,200,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,200,5>": "",
 | 
			
		||||
                        "<2,2,200,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,201>": {
 | 
			
		||||
                        "<2,2,201,1>": "R",
 | 
			
		||||
                        "<2,2,201,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,201,3>": "SYSPROG*OIWINEXE**JCH_INDEX",
 | 
			
		||||
                        "<2,2,201,4>": {
 | 
			
		||||
                            "<2,2,201,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,201,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,201,3>": "LSL2*STPROCEXE**SRP_UTILITY",
 | 
			
		||||
                        "<2,2,201,4>": "",
 | 
			
		||||
                        "<2,2,201,5>": "",
 | 
			
		||||
                        "<2,2,201,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,202>": {
 | 
			
		||||
                        "<2,2,202,1>": "R",
 | 
			
		||||
                        "<2,2,202,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,202,3>": "LSL2*STPROCEXE**EXPORT_INTERFACE_DICTS",
 | 
			
		||||
                        "<2,2,202,4>": "",
 | 
			
		||||
                        "<2,2,202,3>": "SYSPROG*OIWINEXE**JCH_INDEX",
 | 
			
		||||
                        "<2,2,202,4>": {
 | 
			
		||||
                            "<2,2,202,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,202,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,202,5>": "",
 | 
			
		||||
                        "<2,2,202,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,203>": {
 | 
			
		||||
                        "<2,2,203,1>": "R",
 | 
			
		||||
                        "<2,2,203,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,203,3>": "LSL2*STPROCEXE**THRUPUT_REPORT_NEW",
 | 
			
		||||
                        "<2,2,203,3>": "LSL2*STPROCEXE**EXPORT_INTERFACE_DICTS",
 | 
			
		||||
                        "<2,2,203,4>": "",
 | 
			
		||||
                        "<2,2,203,5>": "",
 | 
			
		||||
                        "<2,2,203,6>": ""
 | 
			
		||||
                        "<2,2,203,6>": "",
 | 
			
		||||
                        "<2,2,203,7>": "",
 | 
			
		||||
                        "<2,2,203,8>": "",
 | 
			
		||||
                        "<2,2,203,9>": "",
 | 
			
		||||
                        "<2,2,203,10>": "",
 | 
			
		||||
                        "<2,2,203,11>": "",
 | 
			
		||||
                        "<2,2,203,12>": "",
 | 
			
		||||
                        "<2,2,203,13>": "",
 | 
			
		||||
                        "<2,2,203,14>": "",
 | 
			
		||||
                        "<2,2,203,15>": "STPROC",
 | 
			
		||||
                        "<2,2,203,16>": "0"
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,204>": {
 | 
			
		||||
                        "<2,2,204,1>": "R",
 | 
			
		||||
                        "<2,2,204,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,204,3>": "LSL2*OIWINEXE**AD_TEST",
 | 
			
		||||
                        "<2,2,204,4>": {
 | 
			
		||||
                            "<2,2,204,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,204,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,204,3>": "LSL2*STPROCEXE**THRUPUT_REPORT_NEW",
 | 
			
		||||
                        "<2,2,204,4>": "",
 | 
			
		||||
                        "<2,2,204,5>": "",
 | 
			
		||||
                        "<2,2,204,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,205>": {
 | 
			
		||||
                        "<2,2,205,1>": "R",
 | 
			
		||||
                        "<2,2,205,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,205,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
 | 
			
		||||
                        "<2,2,205,3>": "LSL2*OIWINEXE**AD_TEST",
 | 
			
		||||
                        "<2,2,205,4>": {
 | 
			
		||||
                            "<2,2,205,4,1>": "@SELF",
 | 
			
		||||
                            "<2,2,205,4,2>": "@EVENT",
 | 
			
		||||
                            "<2,2,205,4,3>": "@PARAM1",
 | 
			
		||||
                            "<2,2,205,4,4>": "@PARAM2",
 | 
			
		||||
                            "<2,2,205,4,5>": "@PARAM3",
 | 
			
		||||
                            "<2,2,205,4,6>": "@PARAM4",
 | 
			
		||||
                            "<2,2,205,4,7>": "@PARAM5",
 | 
			
		||||
                            "<2,2,205,4,8>": "@PARAM6"
 | 
			
		||||
                            "<2,2,205,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,205,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,205,5>": "",
 | 
			
		||||
                        "<2,2,205,6>": ""
 | 
			
		||||
@ -11251,34 +11306,40 @@
 | 
			
		||||
                    "<2,2,206>": {
 | 
			
		||||
                        "<2,2,206,1>": "R",
 | 
			
		||||
                        "<2,2,206,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,206,3>": "LSL2*STPROCEXE**JONATHAN_TEST",
 | 
			
		||||
                        "<2,2,206,4>": "",
 | 
			
		||||
                        "<2,2,206,3>": "SYSPROG*STPROCEXE**OBJ_CALL_EVENT",
 | 
			
		||||
                        "<2,2,206,4>": {
 | 
			
		||||
                            "<2,2,206,4,1>": "@SELF",
 | 
			
		||||
                            "<2,2,206,4,2>": "@EVENT",
 | 
			
		||||
                            "<2,2,206,4,3>": "@PARAM1",
 | 
			
		||||
                            "<2,2,206,4,4>": "@PARAM2",
 | 
			
		||||
                            "<2,2,206,4,5>": "@PARAM3",
 | 
			
		||||
                            "<2,2,206,4,6>": "@PARAM4",
 | 
			
		||||
                            "<2,2,206,4,7>": "@PARAM5",
 | 
			
		||||
                            "<2,2,206,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,206,5>": "",
 | 
			
		||||
                        "<2,2,206,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,207>": {
 | 
			
		||||
                        "<2,2,207,1>": "R",
 | 
			
		||||
                        "<2,2,207,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,207,3>": "LSL2*STPROCEXE**PRINT_REACT_MODE_LOG_SERVICES",
 | 
			
		||||
                        "<2,2,207,4>": "RunAllReport",
 | 
			
		||||
                        "<2,2,207,3>": "LSL2*STPROCEXE**JONATHAN_TEST",
 | 
			
		||||
                        "<2,2,207,4>": "",
 | 
			
		||||
                        "<2,2,207,5>": "",
 | 
			
		||||
                        "<2,2,207,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,208>": {
 | 
			
		||||
                        "<2,2,208,1>": "R",
 | 
			
		||||
                        "<2,2,208,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,208,3>": "LSL2*OIWINEXE**NDW_AUDIT_TRAIL",
 | 
			
		||||
                        "<2,2,208,4>": {
 | 
			
		||||
                            "<2,2,208,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,208,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,208,3>": "LSL2*STPROCEXE**PRINT_REACT_MODE_LOG_SERVICES",
 | 
			
		||||
                        "<2,2,208,4>": "RunAllReport",
 | 
			
		||||
                        "<2,2,208,5>": "",
 | 
			
		||||
                        "<2,2,208,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,209>": {
 | 
			
		||||
                        "<2,2,209,1>": "R",
 | 
			
		||||
                        "<2,2,209,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,209,3>": "LSL2*OIWINEXE**DBW_AUDIT_MANAGER",
 | 
			
		||||
                        "<2,2,209,3>": "LSL2*OIWINEXE**NDW_AUDIT_TRAIL",
 | 
			
		||||
                        "<2,2,209,4>": {
 | 
			
		||||
                            "<2,2,209,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,209,4,2>": "@WINDOW"
 | 
			
		||||
@ -11289,7 +11350,7 @@
 | 
			
		||||
                    "<2,2,210>": {
 | 
			
		||||
                        "<2,2,210,1>": "R",
 | 
			
		||||
                        "<2,2,210,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,210,3>": "LSL2*OIWINEXE**NDW_TOOLS_MODE_CHG",
 | 
			
		||||
                        "<2,2,210,3>": "LSL2*OIWINEXE**DBW_AUDIT_MANAGER",
 | 
			
		||||
                        "<2,2,210,4>": {
 | 
			
		||||
                            "<2,2,210,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,210,4,2>": "@WINDOW"
 | 
			
		||||
@ -11300,7 +11361,7 @@
 | 
			
		||||
                    "<2,2,211>": {
 | 
			
		||||
                        "<2,2,211,1>": "R",
 | 
			
		||||
                        "<2,2,211,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,211,3>": "LSL2*OIWINEXE**NDW_REACTORS_MODE_CHG",
 | 
			
		||||
                        "<2,2,211,3>": "LSL2*OIWINEXE**NDW_TOOLS_MODE_CHG",
 | 
			
		||||
                        "<2,2,211,4>": {
 | 
			
		||||
                            "<2,2,211,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,211,4,2>": "@WINDOW"
 | 
			
		||||
@ -11318,6 +11379,17 @@
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,212,5>": "",
 | 
			
		||||
                        "<2,2,212,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<2,2,213>": {
 | 
			
		||||
                        "<2,2,213,1>": "R",
 | 
			
		||||
                        "<2,2,213,2>": "EXECUTE",
 | 
			
		||||
                        "<2,2,213,3>": "LSL2*OIWINEXE**NDW_REACTORS_MODE_CHG",
 | 
			
		||||
                        "<2,2,213,4>": {
 | 
			
		||||
                            "<2,2,213,4,1>": "CreateParam",
 | 
			
		||||
                            "<2,2,213,4,2>": "@WINDOW"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<2,2,213,5>": "",
 | 
			
		||||
                        "<2,2,213,6>": ""
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<2,3>": {
 | 
			
		||||
@ -11506,33 +11578,34 @@
 | 
			
		||||
                    "<2,3,183>": "ADM.EPI_SUSCEPTOR",
 | 
			
		||||
                    "<2,3,184>": "ADM.TEST_POINT_MAP",
 | 
			
		||||
                    "<2,3,185>": "ADM.PRINT_AKRION_TEST",
 | 
			
		||||
                    "<2,3,186>": "ADM.WH.LOCATION",
 | 
			
		||||
                    "<2,3,187>": "ADM.WH.WAREHOUSE",
 | 
			
		||||
                    "<2,3,188>": "ADM.WH.GENERIC_BAR_CODE_LABEL",
 | 
			
		||||
                    "<2,3,189>": "ADM.NIGHTLY_PROCESS_SETUP",
 | 
			
		||||
                    "<2,3,190>": "ADM.RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                    "<2,3,191>": "ADMI.CUST_PROD_TEST_WAFER",
 | 
			
		||||
                    "<2,3,192>": "ADM.THRUPUT_TARGETS.FISCAL_YEAR",
 | 
			
		||||
                    "<2,3,193>": "ADM.THRUPUT_TARGETS.FISCAL_QUARTER",
 | 
			
		||||
                    "<2,3,194>": "ADM.RAS.AC",
 | 
			
		||||
                    "<2,3,195>": "ADM.RAS.DE_GROUPS",
 | 
			
		||||
                    "<2,3,196>": "ADM.RAS.LOSS_CODES",
 | 
			
		||||
                    "<2,3,197>": "ADM.TEST_WFR_USE_CD",
 | 
			
		||||
                    "<2,3,198>": "ADM.DEV.KEEP_ALIVES",
 | 
			
		||||
                    "<2,3,199>": "ADMIN.DEVELOPER.MES_TASK",
 | 
			
		||||
                    "<2,3,200>": "ADMIN.DEVELOPER.SRP_UTILITY",
 | 
			
		||||
                    "<2,3,201>": "ADMIN.DEVELOPER.DICTIONARY_LISTINGS",
 | 
			
		||||
                    "<2,3,202>": "ADM.DEVELOPER.INTERFACE_DICT_EXPORT",
 | 
			
		||||
                    "<2,3,203>": "ADMIN.DEVELOPER.THRUPUT_TEST",
 | 
			
		||||
                    "<2,3,204>": "ADMIN.DEVELOPER.AD_TEST",
 | 
			
		||||
                    "<2,3,205>": "ADMIN.DEVELOPER.SESSION_MANAGER",
 | 
			
		||||
                    "<2,3,206>": "ADMIN.DEVELOPER.WEBTEST",
 | 
			
		||||
                    "<2,3,207>": "ADMIN.DEVELOPER.ALL_REACTOR_MODES",
 | 
			
		||||
                    "<2,3,208>": "ADM.DEV.ARCHIVE.AUDIT_TRAIL",
 | 
			
		||||
                    "<2,3,209>": "ADM.DEV.ARCHIVE.AUDIT_MANAGER",
 | 
			
		||||
                    "<2,3,210>": "ADMIN.MASS_TOOL_MODE_CHANGE",
 | 
			
		||||
                    "<2,3,211>": "ADMIN.MASS_REACTOR_MODE_CHANGE",
 | 
			
		||||
                    "<2,3,212>": "ADMIN.TOOLS_EVAC"
 | 
			
		||||
                    "<2,3,186>": "ADM.TOOLS.PRS_STAGE_DEFAULTS",
 | 
			
		||||
                    "<2,3,187>": "ADM.WH.LOCATION",
 | 
			
		||||
                    "<2,3,188>": "ADM.WH.WAREHOUSE",
 | 
			
		||||
                    "<2,3,189>": "ADM.WH.GENERIC_BAR_CODE_LABEL",
 | 
			
		||||
                    "<2,3,190>": "ADM.NIGHTLY_PROCESS_SETUP",
 | 
			
		||||
                    "<2,3,191>": "ADM.RUN_NIGHTLY_PROCESS",
 | 
			
		||||
                    "<2,3,192>": "ADMI.CUST_PROD_TEST_WAFER",
 | 
			
		||||
                    "<2,3,193>": "ADM.THRUPUT_TARGETS.FISCAL_YEAR",
 | 
			
		||||
                    "<2,3,194>": "ADM.THRUPUT_TARGETS.FISCAL_QUARTER",
 | 
			
		||||
                    "<2,3,195>": "ADM.RAS.AC",
 | 
			
		||||
                    "<2,3,196>": "ADM.RAS.DE_GROUPS",
 | 
			
		||||
                    "<2,3,197>": "ADM.RAS.LOSS_CODES",
 | 
			
		||||
                    "<2,3,198>": "ADM.TEST_WFR_USE_CD",
 | 
			
		||||
                    "<2,3,199>": "ADM.DEV.KEEP_ALIVES",
 | 
			
		||||
                    "<2,3,200>": "ADMIN.DEVELOPER.MES_TASK",
 | 
			
		||||
                    "<2,3,201>": "ADMIN.DEVELOPER.SRP_UTILITY",
 | 
			
		||||
                    "<2,3,202>": "ADMIN.DEVELOPER.DICTIONARY_LISTINGS",
 | 
			
		||||
                    "<2,3,203>": "ADM.DEVELOPER.INTERFACE_DICT_EXPORT",
 | 
			
		||||
                    "<2,3,204>": "ADMIN.DEVELOPER.THRUPUT_TEST",
 | 
			
		||||
                    "<2,3,205>": "ADMIN.DEVELOPER.AD_TEST",
 | 
			
		||||
                    "<2,3,206>": "ADMIN.DEVELOPER.SESSION_MANAGER",
 | 
			
		||||
                    "<2,3,207>": "ADMIN.DEVELOPER.WEBTEST",
 | 
			
		||||
                    "<2,3,208>": "ADMIN.DEVELOPER.ALL_REACTOR_MODES",
 | 
			
		||||
                    "<2,3,209>": "ADM.DEV.ARCHIVE.AUDIT_TRAIL",
 | 
			
		||||
                    "<2,3,210>": "ADM.DEV.ARCHIVE.AUDIT_MANAGER",
 | 
			
		||||
                    "<2,3,211>": "ADMIN.MASS_TOOL_MODE_CHANGE",
 | 
			
		||||
                    "<2,3,212>": "ADMIN.MASS_REACTOR_MODE_CHANGE",
 | 
			
		||||
                    "<2,3,213>": "ADMIN.TOOLS_EVAC"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,4>": "0"
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -17,20 +17,24 @@
 | 
			
		||||
                "<1,4>": "",
 | 
			
		||||
                "<1,5>": "468",
 | 
			
		||||
                "<1,6>": "145",
 | 
			
		||||
                "<1,7>": "-661",
 | 
			
		||||
                "<1,7>": "-776",
 | 
			
		||||
                "<1,8>": "-581",
 | 
			
		||||
                "<1,9>": "PM History",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x94CF0000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                    "<1,10,1>": "0x84CF0000",
 | 
			
		||||
                    "<1,10,2>": "0x100"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x0",
 | 
			
		||||
                    "<1,11,1>": "0x8000",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "0",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,12>": "",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "",
 | 
			
		||||
                "<1,15>": "",
 | 
			
		||||
                "<1,16>": "",
 | 
			
		||||
                "<1,17>": "",
 | 
			
		||||
@ -50,51 +54,61 @@
 | 
			
		||||
                            "<1,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<1,18,1,5>": "",
 | 
			
		||||
                        "<1,18,1,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<1,18,2>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,19>": {
 | 
			
		||||
                    "<1,19,1>": "CREATE",
 | 
			
		||||
                    "<1,19,2>": ""
 | 
			
		||||
                        "<1,18,1,6>": "",
 | 
			
		||||
                        "<1,18,1,7>": "",
 | 
			
		||||
                        "<1,18,1,8>": "",
 | 
			
		||||
                        "<1,18,1,9>": "",
 | 
			
		||||
                        "<1,18,1,10>": "",
 | 
			
		||||
                        "<1,18,1,11>": "",
 | 
			
		||||
                        "<1,18,1,12>": "",
 | 
			
		||||
                        "<1,18,1,13>": "",
 | 
			
		||||
                        "<1,18,1,14>": "",
 | 
			
		||||
                        "<1,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<1,19>": "CREATE",
 | 
			
		||||
                "<1,20>": "",
 | 
			
		||||
                "<1,21>": "",
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": {
 | 
			
		||||
                    "<1,24,1>": "0",
 | 
			
		||||
                    "<1,24,1>": "",
 | 
			
		||||
                    "<1,24,2>": "0",
 | 
			
		||||
                    "<1,24,3>": "0",
 | 
			
		||||
                    "<1,24,4>": "0",
 | 
			
		||||
                    "<1,24,5>": "0",
 | 
			
		||||
                    "<1,24,6>": "0"
 | 
			
		||||
                    "<1,24,5>": "",
 | 
			
		||||
                    "<1,24,6>": "0",
 | 
			
		||||
                    "<1,24,7>": "",
 | 
			
		||||
                    "<1,24,8>": "",
 | 
			
		||||
                    "<1,24,9>": "",
 | 
			
		||||
                    "<1,24,10>": "0",
 | 
			
		||||
                    "<1,24,11>": "0",
 | 
			
		||||
                    "<1,24,12>": "0",
 | 
			
		||||
                    "<1,24,13>": "0",
 | 
			
		||||
                    "<1,24,14>": "0",
 | 
			
		||||
                    "<1,24,15>": "0",
 | 
			
		||||
                    "<1,24,16>": "0",
 | 
			
		||||
                    "<1,24,17>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": {
 | 
			
		||||
                    "<1,32,1>": "0x7FFFE",
 | 
			
		||||
                    "<1,32,2>": "0xF001E808"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*INFINEON",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
                    "<1,37,1>": "0x10001",
 | 
			
		||||
                    "<1,37,2>": "0x10001"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,38>": {
 | 
			
		||||
                    "<1,38,1>": "1",
 | 
			
		||||
                    "<1,38,2>": "1"
 | 
			
		||||
                    "<1,37,1>": "0X10001",
 | 
			
		||||
                    "<1,37,2>": "0X10001"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,38>": "",
 | 
			
		||||
                "<1,39>": "",
 | 
			
		||||
                "<1,40>": "0",
 | 
			
		||||
                "<1,40>": "",
 | 
			
		||||
                "<1,41>": "",
 | 
			
		||||
                "<1,42>": "",
 | 
			
		||||
                "<1,43>": "",
 | 
			
		||||
@ -106,7 +120,74 @@
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": ""
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": "",
 | 
			
		||||
                "<1,56>": "",
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": {
 | 
			
		||||
                    "<1,62,1>": "0",
 | 
			
		||||
                    "<1,62,2>": "",
 | 
			
		||||
                    "<1,62,3>": "",
 | 
			
		||||
                    "<1,62,4>": "0",
 | 
			
		||||
                    "<1,62,5>": "0",
 | 
			
		||||
                    "<1,62,6>": "0",
 | 
			
		||||
                    "<1,62,7>": "",
 | 
			
		||||
                    "<1,62,8>": "0.50",
 | 
			
		||||
                    "<1,62,9>": "5.00",
 | 
			
		||||
                    "<1,62,10>": "0.00"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "0",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record3": {
 | 
			
		||||
@ -117,19 +198,23 @@
 | 
			
		||||
                "<1,4>": "NDW_PM_HISTORY",
 | 
			
		||||
                "<1,5>": "10",
 | 
			
		||||
                "<1,6>": "50",
 | 
			
		||||
                "<1,7>": "640",
 | 
			
		||||
                "<1,8>": "520",
 | 
			
		||||
                "<1,7>": "-14",
 | 
			
		||||
                "<1,8>": "-11",
 | 
			
		||||
                "<1,9>": "SRP.EditTable.1",
 | 
			
		||||
                "<1,10>": {
 | 
			
		||||
                    "<1,10,1>": "0x56000000",
 | 
			
		||||
                    "<1,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,11>": {
 | 
			
		||||
                    "<1,11,1>": "0x4",
 | 
			
		||||
                    "<1,11,1>": "0xC004",
 | 
			
		||||
                    "<1,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,12>": "1",
 | 
			
		||||
                "<1,13>": "-2",
 | 
			
		||||
                "<1,13>": {
 | 
			
		||||
                    "<1,13,1>": "-2",
 | 
			
		||||
                    "<1,13,2>": "-2",
 | 
			
		||||
                    "<1,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<1,14>": "0",
 | 
			
		||||
                "<1,15>": {
 | 
			
		||||
                    "<1,15,1>": {
 | 
			
		||||
@ -158,17 +243,14 @@
 | 
			
		||||
                "<1,22>": "",
 | 
			
		||||
                "<1,23>": "",
 | 
			
		||||
                "<1,24>": "",
 | 
			
		||||
                "<1,25>": "0",
 | 
			
		||||
                "<1,26>": "0",
 | 
			
		||||
                "<1,25>": "",
 | 
			
		||||
                "<1,26>": "",
 | 
			
		||||
                "<1,27>": "",
 | 
			
		||||
                "<1,28>": "<<None>>",
 | 
			
		||||
                "<1,29>": "<<None>>",
 | 
			
		||||
                "<1,30>": "<<None>>",
 | 
			
		||||
                "<1,31>": "0",
 | 
			
		||||
                "<1,32>": {
 | 
			
		||||
                    "<1,32,1>": "0x7fffe",
 | 
			
		||||
                    "<1,32,2>": "0xf0016400"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,28>": "",
 | 
			
		||||
                "<1,29>": "",
 | 
			
		||||
                "<1,30>": "",
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
@ -188,7 +270,89 @@
 | 
			
		||||
                "<1,49>": "",
 | 
			
		||||
                "<1,50>": "",
 | 
			
		||||
                "<1,51>": "",
 | 
			
		||||
                "<1,52>": ""
 | 
			
		||||
                "<1,52>": "",
 | 
			
		||||
                "<1,53>": "",
 | 
			
		||||
                "<1,54>": "",
 | 
			
		||||
                "<1,55>": {
 | 
			
		||||
                    "<1,55,1>": "OLE.AllowXPTheme",
 | 
			
		||||
                    "<1,55,2>": "OLE.ComboDropDown",
 | 
			
		||||
                    "<1,55,3>": "OLE.DblClickToEdit",
 | 
			
		||||
                    "<1,55,4>": "OLE.EditContextMenu",
 | 
			
		||||
                    "<1,55,5>": "OLE.EditText",
 | 
			
		||||
                    "<1,55,6>": "OLE.Focus",
 | 
			
		||||
                    "<1,55,7>": "OLE.HeaderRowCount",
 | 
			
		||||
                    "<1,55,8>": "OLE.Modified",
 | 
			
		||||
                    "<1,55,9>": "OLE.PassEnterKey",
 | 
			
		||||
                    "<1,55,10>": "OLE.ScrollBarsVisible",
 | 
			
		||||
                    "<1,55,11>": "OLE.SingleEscape",
 | 
			
		||||
                    "<1,55,12>": "OLE.TextRenderStyle"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,56>": {
 | 
			
		||||
                    "<1,56,1>": "0",
 | 
			
		||||
                    "<1,56,2>": "0",
 | 
			
		||||
                    "<1,56,3>": "1",
 | 
			
		||||
                    "<1,56,4>": "1",
 | 
			
		||||
                    "<1,56,5>": "",
 | 
			
		||||
                    "<1,56,6>": "0",
 | 
			
		||||
                    "<1,56,7>": "1",
 | 
			
		||||
                    "<1,56,8>": "0",
 | 
			
		||||
                    "<1,56,9>": "0",
 | 
			
		||||
                    "<1,56,10>": "Auto|Auto",
 | 
			
		||||
                    "<1,56,11>": "0",
 | 
			
		||||
                    "<1,56,12>": "EditField|Ellipses"
 | 
			
		||||
                },
 | 
			
		||||
                "<1,57>": "",
 | 
			
		||||
                "<1,58>": "",
 | 
			
		||||
                "<1,59>": "",
 | 
			
		||||
                "<1,60>": "",
 | 
			
		||||
                "<1,61>": "",
 | 
			
		||||
                "<1,62>": "",
 | 
			
		||||
                "<1,63>": "",
 | 
			
		||||
                "<1,64>": "",
 | 
			
		||||
                "<1,65>": "",
 | 
			
		||||
                "<1,66>": "",
 | 
			
		||||
                "<1,67>": "",
 | 
			
		||||
                "<1,68>": "",
 | 
			
		||||
                "<1,69>": "",
 | 
			
		||||
                "<1,70>": "",
 | 
			
		||||
                "<1,71>": "",
 | 
			
		||||
                "<1,72>": "",
 | 
			
		||||
                "<1,73>": "",
 | 
			
		||||
                "<1,74>": "",
 | 
			
		||||
                "<1,75>": "",
 | 
			
		||||
                "<1,76>": "",
 | 
			
		||||
                "<1,77>": "",
 | 
			
		||||
                "<1,78>": "",
 | 
			
		||||
                "<1,79>": "",
 | 
			
		||||
                "<1,80>": "",
 | 
			
		||||
                "<1,81>": "",
 | 
			
		||||
                "<1,82>": "",
 | 
			
		||||
                "<1,83>": "",
 | 
			
		||||
                "<1,84>": "",
 | 
			
		||||
                "<1,85>": "",
 | 
			
		||||
                "<1,86>": "",
 | 
			
		||||
                "<1,87>": "",
 | 
			
		||||
                "<1,88>": "",
 | 
			
		||||
                "<1,89>": "",
 | 
			
		||||
                "<1,90>": "",
 | 
			
		||||
                "<1,91>": "",
 | 
			
		||||
                "<1,92>": "",
 | 
			
		||||
                "<1,93>": "",
 | 
			
		||||
                "<1,94>": "",
 | 
			
		||||
                "<1,95>": "",
 | 
			
		||||
                "<1,96>": "",
 | 
			
		||||
                "<1,97>": "",
 | 
			
		||||
                "<1,98>": "",
 | 
			
		||||
                "<1,99>": "",
 | 
			
		||||
                "<1,100>": "",
 | 
			
		||||
                "<1,101>": "",
 | 
			
		||||
                "<1,102>": "",
 | 
			
		||||
                "<1,103>": "",
 | 
			
		||||
                "<1,104>": "",
 | 
			
		||||
                "<1,105>": "",
 | 
			
		||||
                "<1,106>": "",
 | 
			
		||||
                "<1,107>": "",
 | 
			
		||||
                "<1,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "EDL_PM_SPEC",
 | 
			
		||||
@ -209,7 +373,11 @@
 | 
			
		||||
                    "<2,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,12>": "2",
 | 
			
		||||
                "<2,13>": "-2",
 | 
			
		||||
                "<2,13>": {
 | 
			
		||||
                    "<2,13,1>": "-2",
 | 
			
		||||
                    "<2,13,2>": "-2",
 | 
			
		||||
                    "<2,13,3>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<2,14>": "0",
 | 
			
		||||
                "<2,15>": {
 | 
			
		||||
                    "<2,15,1>": {
 | 
			
		||||
@ -238,21 +406,21 @@
 | 
			
		||||
                "<2,22>": "",
 | 
			
		||||
                "<2,23>": "",
 | 
			
		||||
                "<2,24>": "",
 | 
			
		||||
                "<2,25>": "0",
 | 
			
		||||
                "<2,26>": "0",
 | 
			
		||||
                "<2,25>": "",
 | 
			
		||||
                "<2,26>": "",
 | 
			
		||||
                "<2,27>": "",
 | 
			
		||||
                "<2,28>": "<<None>>",
 | 
			
		||||
                "<2,29>": "<<None>>",
 | 
			
		||||
                "<2,30>": "<<None>>",
 | 
			
		||||
                "<2,31>": "0",
 | 
			
		||||
                "<2,32>": {
 | 
			
		||||
                    "<2,32,1>": "0x7fffe",
 | 
			
		||||
                    "<2,32,2>": "0xf0016c08"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,32>": "",
 | 
			
		||||
                "<2,33>": "",
 | 
			
		||||
                "<2,34>": "",
 | 
			
		||||
                "<2,35>": "",
 | 
			
		||||
                "<2,36>": "",
 | 
			
		||||
                "<2,36>": {
 | 
			
		||||
                    "<2,36,1>": "0",
 | 
			
		||||
                    "<2,36,2>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<2,37>": "",
 | 
			
		||||
                "<2,38>": "",
 | 
			
		||||
                "<2,39>": "",
 | 
			
		||||
@ -268,7 +436,63 @@
 | 
			
		||||
                "<2,49>": "",
 | 
			
		||||
                "<2,50>": "",
 | 
			
		||||
                "<2,51>": "",
 | 
			
		||||
                "<2,52>": ""
 | 
			
		||||
                "<2,52>": "",
 | 
			
		||||
                "<2,53>": "",
 | 
			
		||||
                "<2,54>": "",
 | 
			
		||||
                "<2,55>": "",
 | 
			
		||||
                "<2,56>": "",
 | 
			
		||||
                "<2,57>": "",
 | 
			
		||||
                "<2,58>": "",
 | 
			
		||||
                "<2,59>": "",
 | 
			
		||||
                "<2,60>": "",
 | 
			
		||||
                "<2,61>": "",
 | 
			
		||||
                "<2,62>": "0",
 | 
			
		||||
                "<2,63>": "",
 | 
			
		||||
                "<2,64>": "",
 | 
			
		||||
                "<2,65>": "",
 | 
			
		||||
                "<2,66>": "",
 | 
			
		||||
                "<2,67>": "",
 | 
			
		||||
                "<2,68>": "",
 | 
			
		||||
                "<2,69>": "",
 | 
			
		||||
                "<2,70>": "",
 | 
			
		||||
                "<2,71>": "",
 | 
			
		||||
                "<2,72>": "",
 | 
			
		||||
                "<2,73>": "",
 | 
			
		||||
                "<2,74>": "",
 | 
			
		||||
                "<2,75>": "",
 | 
			
		||||
                "<2,76>": "",
 | 
			
		||||
                "<2,77>": "",
 | 
			
		||||
                "<2,78>": "",
 | 
			
		||||
                "<2,79>": "",
 | 
			
		||||
                "<2,80>": "",
 | 
			
		||||
                "<2,81>": "",
 | 
			
		||||
                "<2,82>": "",
 | 
			
		||||
                "<2,83>": "",
 | 
			
		||||
                "<2,84>": "",
 | 
			
		||||
                "<2,85>": "",
 | 
			
		||||
                "<2,86>": "",
 | 
			
		||||
                "<2,87>": "",
 | 
			
		||||
                "<2,88>": "",
 | 
			
		||||
                "<2,89>": "",
 | 
			
		||||
                "<2,90>": "",
 | 
			
		||||
                "<2,91>": "",
 | 
			
		||||
                "<2,92>": "",
 | 
			
		||||
                "<2,93>": "",
 | 
			
		||||
                "<2,94>": "",
 | 
			
		||||
                "<2,95>": "",
 | 
			
		||||
                "<2,96>": "",
 | 
			
		||||
                "<2,97>": "",
 | 
			
		||||
                "<2,98>": "",
 | 
			
		||||
                "<2,99>": "",
 | 
			
		||||
                "<2,100>": "",
 | 
			
		||||
                "<2,101>": "",
 | 
			
		||||
                "<2,102>": "",
 | 
			
		||||
                "<2,103>": "",
 | 
			
		||||
                "<2,104>": "",
 | 
			
		||||
                "<2,105>": "",
 | 
			
		||||
                "<2,106>": "",
 | 
			
		||||
                "<2,107>": "",
 | 
			
		||||
                "<2,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<3>": {
 | 
			
		||||
                "<3,1>": "PUB_EXPORT_TO_EXCEL",
 | 
			
		||||
@ -281,15 +505,19 @@
 | 
			
		||||
                "<3,8>": "30",
 | 
			
		||||
                "<3,9>": "Export To Excel",
 | 
			
		||||
                "<3,10>": {
 | 
			
		||||
                    "<3,10,1>": "0x56002000",
 | 
			
		||||
                    "<3,10,1>": "0x56002300",
 | 
			
		||||
                    "<3,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,11>": {
 | 
			
		||||
                    "<3,11,1>": "0x100",
 | 
			
		||||
                    "<3,11,1>": "0x0",
 | 
			
		||||
                    "<3,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,12>": "3",
 | 
			
		||||
                "<3,13>": "-2",
 | 
			
		||||
                "<3,13>": {
 | 
			
		||||
                    "<3,13,1>": "-2",
 | 
			
		||||
                    "<3,13,2>": "-2",
 | 
			
		||||
                    "<3,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,14>": "0",
 | 
			
		||||
                "<3,15>": {
 | 
			
		||||
                    "<3,15,1>": {
 | 
			
		||||
@ -327,30 +555,32 @@
 | 
			
		||||
                            "<3,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<3,18,1,5>": "",
 | 
			
		||||
                        "<3,18,1,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<3,18,2>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<3,19>": {
 | 
			
		||||
                    "<3,19,1>": "CLICK",
 | 
			
		||||
                    "<3,19,2>": ""
 | 
			
		||||
                        "<3,18,1,6>": "",
 | 
			
		||||
                        "<3,18,1,7>": "",
 | 
			
		||||
                        "<3,18,1,8>": "",
 | 
			
		||||
                        "<3,18,1,9>": "",
 | 
			
		||||
                        "<3,18,1,10>": "",
 | 
			
		||||
                        "<3,18,1,11>": "",
 | 
			
		||||
                        "<3,18,1,12>": "",
 | 
			
		||||
                        "<3,18,1,13>": "",
 | 
			
		||||
                        "<3,18,1,14>": "",
 | 
			
		||||
                        "<3,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<3,19>": "CLICK",
 | 
			
		||||
                "<3,20>": "",
 | 
			
		||||
                "<3,21>": "",
 | 
			
		||||
                "<3,22>": "",
 | 
			
		||||
                "<3,23>": "",
 | 
			
		||||
                "<3,24>": "",
 | 
			
		||||
                "<3,25>": "0",
 | 
			
		||||
                "<3,26>": "0",
 | 
			
		||||
                "<3,25>": "",
 | 
			
		||||
                "<3,26>": "",
 | 
			
		||||
                "<3,27>": "",
 | 
			
		||||
                "<3,28>": "<<None>>",
 | 
			
		||||
                "<3,29>": "<<None>>",
 | 
			
		||||
                "<3,30>": "<<None>>",
 | 
			
		||||
                "<3,31>": "0",
 | 
			
		||||
                "<3,32>": {
 | 
			
		||||
                    "<3,32,1>": "0x7fffe",
 | 
			
		||||
                    "<3,32,2>": "0xf0016008"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,28>": "",
 | 
			
		||||
                "<3,29>": "",
 | 
			
		||||
                "<3,30>": "",
 | 
			
		||||
                "<3,31>": "",
 | 
			
		||||
                "<3,32>": "",
 | 
			
		||||
                "<3,33>": "",
 | 
			
		||||
                "<3,34>": "",
 | 
			
		||||
                "<3,35>": "",
 | 
			
		||||
@ -359,7 +589,10 @@
 | 
			
		||||
                "<3,38>": "",
 | 
			
		||||
                "<3,39>": "",
 | 
			
		||||
                "<3,40>": "1",
 | 
			
		||||
                "<3,41>": "",
 | 
			
		||||
                "<3,41>": {
 | 
			
		||||
                    "<3,41,1>": "",
 | 
			
		||||
                    "<3,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,42>": "",
 | 
			
		||||
                "<3,43>": "",
 | 
			
		||||
                "<3,44>": "",
 | 
			
		||||
@ -370,7 +603,67 @@
 | 
			
		||||
                "<3,49>": "",
 | 
			
		||||
                "<3,50>": "",
 | 
			
		||||
                "<3,51>": "",
 | 
			
		||||
                "<3,52>": ""
 | 
			
		||||
                "<3,52>": "",
 | 
			
		||||
                "<3,53>": "",
 | 
			
		||||
                "<3,54>": "",
 | 
			
		||||
                "<3,55>": "",
 | 
			
		||||
                "<3,56>": "",
 | 
			
		||||
                "<3,57>": "",
 | 
			
		||||
                "<3,58>": "",
 | 
			
		||||
                "<3,59>": "",
 | 
			
		||||
                "<3,60>": "",
 | 
			
		||||
                "<3,61>": "",
 | 
			
		||||
                "<3,62>": "0",
 | 
			
		||||
                "<3,63>": "",
 | 
			
		||||
                "<3,64>": {
 | 
			
		||||
                    "<3,64,1>": "-2",
 | 
			
		||||
                    "<3,64,2>": "-2",
 | 
			
		||||
                    "<3,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<3,65>": "-2",
 | 
			
		||||
                "<3,66>": "",
 | 
			
		||||
                "<3,67>": "",
 | 
			
		||||
                "<3,68>": "",
 | 
			
		||||
                "<3,69>": "",
 | 
			
		||||
                "<3,70>": "",
 | 
			
		||||
                "<3,71>": "",
 | 
			
		||||
                "<3,72>": "",
 | 
			
		||||
                "<3,73>": "",
 | 
			
		||||
                "<3,74>": "",
 | 
			
		||||
                "<3,75>": "",
 | 
			
		||||
                "<3,76>": "",
 | 
			
		||||
                "<3,77>": "",
 | 
			
		||||
                "<3,78>": "",
 | 
			
		||||
                "<3,79>": "",
 | 
			
		||||
                "<3,80>": "",
 | 
			
		||||
                "<3,81>": "",
 | 
			
		||||
                "<3,82>": "",
 | 
			
		||||
                "<3,83>": "",
 | 
			
		||||
                "<3,84>": "",
 | 
			
		||||
                "<3,85>": "",
 | 
			
		||||
                "<3,86>": "",
 | 
			
		||||
                "<3,87>": "",
 | 
			
		||||
                "<3,88>": "",
 | 
			
		||||
                "<3,89>": "",
 | 
			
		||||
                "<3,90>": "0",
 | 
			
		||||
                "<3,91>": "0",
 | 
			
		||||
                "<3,92>": "",
 | 
			
		||||
                "<3,93>": "",
 | 
			
		||||
                "<3,94>": "",
 | 
			
		||||
                "<3,95>": "",
 | 
			
		||||
                "<3,96>": "",
 | 
			
		||||
                "<3,97>": "",
 | 
			
		||||
                "<3,98>": "",
 | 
			
		||||
                "<3,99>": "",
 | 
			
		||||
                "<3,100>": "",
 | 
			
		||||
                "<3,101>": "",
 | 
			
		||||
                "<3,102>": "",
 | 
			
		||||
                "<3,103>": "",
 | 
			
		||||
                "<3,104>": "",
 | 
			
		||||
                "<3,105>": "",
 | 
			
		||||
                "<3,106>": "",
 | 
			
		||||
                "<3,107>": "",
 | 
			
		||||
                "<3,108>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<4>": {
 | 
			
		||||
                "<4,1>": "PUB_SEARCH",
 | 
			
		||||
@ -383,15 +676,19 @@
 | 
			
		||||
                "<4,8>": "30",
 | 
			
		||||
                "<4,9>": "Search",
 | 
			
		||||
                "<4,10>": {
 | 
			
		||||
                    "<4,10,1>": "0x56002000",
 | 
			
		||||
                    "<4,10,1>": "0x56002300",
 | 
			
		||||
                    "<4,10,2>": "0x0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,11>": {
 | 
			
		||||
                    "<4,11,1>": "0x100",
 | 
			
		||||
                    "<4,11,1>": "0x0",
 | 
			
		||||
                    "<4,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,12>": "4",
 | 
			
		||||
                "<4,13>": "-2",
 | 
			
		||||
                "<4,13>": {
 | 
			
		||||
                    "<4,13,1>": "-2",
 | 
			
		||||
                    "<4,13,2>": "-2",
 | 
			
		||||
                    "<4,13,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,14>": "0",
 | 
			
		||||
                "<4,15>": {
 | 
			
		||||
                    "<4,15,1>": {
 | 
			
		||||
@ -429,30 +726,32 @@
 | 
			
		||||
                            "<4,18,1,4,8>": "@PARAM6"
 | 
			
		||||
                        },
 | 
			
		||||
                        "<4,18,1,5>": "",
 | 
			
		||||
                        "<4,18,1,6>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<4,18,2>": ""
 | 
			
		||||
                },
 | 
			
		||||
                "<4,19>": {
 | 
			
		||||
                    "<4,19,1>": "CLICK",
 | 
			
		||||
                    "<4,19,2>": ""
 | 
			
		||||
                        "<4,18,1,6>": "",
 | 
			
		||||
                        "<4,18,1,7>": "",
 | 
			
		||||
                        "<4,18,1,8>": "",
 | 
			
		||||
                        "<4,18,1,9>": "",
 | 
			
		||||
                        "<4,18,1,10>": "",
 | 
			
		||||
                        "<4,18,1,11>": "",
 | 
			
		||||
                        "<4,18,1,12>": "",
 | 
			
		||||
                        "<4,18,1,13>": "",
 | 
			
		||||
                        "<4,18,1,14>": "",
 | 
			
		||||
                        "<4,18,1,15>": "STPROC"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<4,19>": "CLICK",
 | 
			
		||||
                "<4,20>": "",
 | 
			
		||||
                "<4,21>": "",
 | 
			
		||||
                "<4,22>": "",
 | 
			
		||||
                "<4,23>": "",
 | 
			
		||||
                "<4,24>": "",
 | 
			
		||||
                "<4,25>": "0",
 | 
			
		||||
                "<4,26>": "0",
 | 
			
		||||
                "<4,25>": "",
 | 
			
		||||
                "<4,26>": "",
 | 
			
		||||
                "<4,27>": "",
 | 
			
		||||
                "<4,28>": "<<None>>",
 | 
			
		||||
                "<4,29>": "<<None>>",
 | 
			
		||||
                "<4,30>": "<<None>>",
 | 
			
		||||
                "<4,31>": "0",
 | 
			
		||||
                "<4,32>": {
 | 
			
		||||
                    "<4,32,1>": "0x7fffe",
 | 
			
		||||
                    "<4,32,2>": "0xf0016008"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,28>": "",
 | 
			
		||||
                "<4,29>": "",
 | 
			
		||||
                "<4,30>": "",
 | 
			
		||||
                "<4,31>": "",
 | 
			
		||||
                "<4,32>": "",
 | 
			
		||||
                "<4,33>": "",
 | 
			
		||||
                "<4,34>": "",
 | 
			
		||||
                "<4,35>": "",
 | 
			
		||||
@ -461,7 +760,10 @@
 | 
			
		||||
                "<4,38>": "",
 | 
			
		||||
                "<4,39>": "",
 | 
			
		||||
                "<4,40>": "1",
 | 
			
		||||
                "<4,41>": "",
 | 
			
		||||
                "<4,41>": {
 | 
			
		||||
                    "<4,41,1>": "",
 | 
			
		||||
                    "<4,41,2>": "-1"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,42>": "",
 | 
			
		||||
                "<4,43>": "",
 | 
			
		||||
                "<4,44>": "",
 | 
			
		||||
@ -472,18 +774,71 @@
 | 
			
		||||
                "<4,49>": "",
 | 
			
		||||
                "<4,50>": "",
 | 
			
		||||
                "<4,51>": "",
 | 
			
		||||
                "<4,52>": ""
 | 
			
		||||
            },
 | 
			
		||||
            "<5>": ""
 | 
			
		||||
                "<4,52>": "",
 | 
			
		||||
                "<4,53>": "",
 | 
			
		||||
                "<4,54>": "",
 | 
			
		||||
                "<4,55>": "",
 | 
			
		||||
                "<4,56>": "",
 | 
			
		||||
                "<4,57>": "",
 | 
			
		||||
                "<4,58>": "",
 | 
			
		||||
                "<4,59>": "",
 | 
			
		||||
                "<4,60>": "",
 | 
			
		||||
                "<4,61>": "",
 | 
			
		||||
                "<4,62>": "0",
 | 
			
		||||
                "<4,63>": "",
 | 
			
		||||
                "<4,64>": {
 | 
			
		||||
                    "<4,64,1>": "-2",
 | 
			
		||||
                    "<4,64,2>": "-2",
 | 
			
		||||
                    "<4,64,3>": "0"
 | 
			
		||||
                },
 | 
			
		||||
                "<4,65>": "-2",
 | 
			
		||||
                "<4,66>": "",
 | 
			
		||||
                "<4,67>": "",
 | 
			
		||||
                "<4,68>": "",
 | 
			
		||||
                "<4,69>": "",
 | 
			
		||||
                "<4,70>": "",
 | 
			
		||||
                "<4,71>": "",
 | 
			
		||||
                "<4,72>": "",
 | 
			
		||||
                "<4,73>": "",
 | 
			
		||||
                "<4,74>": "",
 | 
			
		||||
                "<4,75>": "",
 | 
			
		||||
                "<4,76>": "",
 | 
			
		||||
                "<4,77>": "",
 | 
			
		||||
                "<4,78>": "",
 | 
			
		||||
                "<4,79>": "",
 | 
			
		||||
                "<4,80>": "",
 | 
			
		||||
                "<4,81>": "",
 | 
			
		||||
                "<4,82>": "",
 | 
			
		||||
                "<4,83>": "",
 | 
			
		||||
                "<4,84>": "",
 | 
			
		||||
                "<4,85>": "",
 | 
			
		||||
                "<4,86>": "",
 | 
			
		||||
                "<4,87>": "",
 | 
			
		||||
                "<4,88>": "",
 | 
			
		||||
                "<4,89>": "",
 | 
			
		||||
                "<4,90>": "0",
 | 
			
		||||
                "<4,91>": "0",
 | 
			
		||||
                "<4,92>": "",
 | 
			
		||||
                "<4,93>": "",
 | 
			
		||||
                "<4,94>": "",
 | 
			
		||||
                "<4,95>": "",
 | 
			
		||||
                "<4,96>": "",
 | 
			
		||||
                "<4,97>": "",
 | 
			
		||||
                "<4,98>": "",
 | 
			
		||||
                "<4,99>": "",
 | 
			
		||||
                "<4,100>": "",
 | 
			
		||||
                "<4,101>": "",
 | 
			
		||||
                "<4,102>": "",
 | 
			
		||||
                "<4,103>": "",
 | 
			
		||||
                "<4,104>": "",
 | 
			
		||||
                "<4,105>": "",
 | 
			
		||||
                "<4,106>": "",
 | 
			
		||||
                "<4,107>": "",
 | 
			
		||||
                "<4,108>": ""
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "record4": {
 | 
			
		||||
            "<1>": "",
 | 
			
		||||
            "<2>": {
 | 
			
		||||
                "<2,1>": "",
 | 
			
		||||
                "<2,2>": "",
 | 
			
		||||
                "<2,3>": "",
 | 
			
		||||
                "<2,4>": "0"
 | 
			
		||||
            }
 | 
			
		||||
            "<1>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5207
									
								
								LSL2/OIWIN/PRS_STAGE_DEFECT_DEFAULTS.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5207
									
								
								LSL2/OIWIN/PRS_STAGE_DEFECT_DEFAULTS.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -423,7 +423,7 @@
 | 
			
		||||
                "<1,31>": "",
 | 
			
		||||
                "<1,32>": "",
 | 
			
		||||
                "<1,33>": "",
 | 
			
		||||
                "<1,34>": "",
 | 
			
		||||
                "<1,34>": "LSL2*IMAGE*ICO*INFINEON",
 | 
			
		||||
                "<1,35>": "",
 | 
			
		||||
                "<1,36>": "",
 | 
			
		||||
                "<1,37>": {
 | 
			
		||||
 | 
			
		||||
@ -6655,13 +6655,6 @@
 | 
			
		||||
                        "<41,35,3,3>": "",
 | 
			
		||||
                        "<41,35,3,4>": "",
 | 
			
		||||
                        "<41,35,3,5>": ""
 | 
			
		||||
                    },
 | 
			
		||||
                    "<41,35,4>": {
 | 
			
		||||
                        "<41,35,4,1>": "",
 | 
			
		||||
                        "<41,35,4,2>": "",
 | 
			
		||||
                        "<41,35,4,3>": "",
 | 
			
		||||
                        "<41,35,4,4>": "",
 | 
			
		||||
                        "<41,35,4,5>": ""
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "<41,36>": "",
 | 
			
		||||
@ -7886,7 +7879,7 @@
 | 
			
		||||
                    "<45,10,2>": "0x200"
 | 
			
		||||
                },
 | 
			
		||||
                "<45,11>": {
 | 
			
		||||
                    "<45,11,1>": "0x0",
 | 
			
		||||
                    "<45,11,1>": "0x80000",
 | 
			
		||||
                    "<45,11,2>": "0x80000000"
 | 
			
		||||
                },
 | 
			
		||||
                "<45,12>": "45",
 | 
			
		||||
@ -7922,7 +7915,7 @@
 | 
			
		||||
                "<45,21>": "",
 | 
			
		||||
                "<45,22>": "",
 | 
			
		||||
                "<45,23>": "WM_OUT",
 | 
			
		||||
                "<45,24>": "SPECIAL_INST",
 | 
			
		||||
                "<45,24>": "SPEC_INST",
 | 
			
		||||
                "<45,25>": "",
 | 
			
		||||
                "<45,26>": "",
 | 
			
		||||
                "<45,27>": "",
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@
 | 
			
		||||
                "<8,2>": {
 | 
			
		||||
                    "<8,2,1>": "MET",
 | 
			
		||||
                    "<8,2,2>": "Metrology",
 | 
			
		||||
                    "<8,2,3>": "TODD_C,  JEANNE_M"
 | 
			
		||||
                    "<8,2,3>": "TODD_C, JEANNE_M, JFUENTE1, JUSTIN_H, JONATHON_S, MARROQUINBRA, TIFFANY_M"
 | 
			
		||||
                },
 | 
			
		||||
                "<8,3>": {
 | 
			
		||||
                    "<8,3,1>": "MTC",
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-1",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "Tahoma",
 | 
			
		||||
@ -31,7 +31,7 @@
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<7>": "REACT_ITEM",
 | 
			
		||||
            "<8>": "BY @ID",
 | 
			
		||||
            "<8>": "BY-DSND ENTER_DTM",
 | 
			
		||||
            "<9>": {
 | 
			
		||||
                "<9,1>": {
 | 
			
		||||
                    "<9,1,1>": "RI_NO",
 | 
			
		||||
@ -120,6 +120,22 @@
 | 
			
		||||
                    "<9,11,4>": "C",
 | 
			
		||||
                    "<9,11,5>": "D4/",
 | 
			
		||||
                    "<9,11,6>": "Retire Dt"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,12>": {
 | 
			
		||||
                    "<9,12,1>": "ENTER_DTM",
 | 
			
		||||
                    "<9,12,2>": "14",
 | 
			
		||||
                    "<9,12,3>": "L",
 | 
			
		||||
                    "<9,12,4>": "C",
 | 
			
		||||
                    "<9,12,5>": "DT2/^H",
 | 
			
		||||
                    "<9,12,6>": "Enter Dtm"
 | 
			
		||||
                },
 | 
			
		||||
                "<9,13>": {
 | 
			
		||||
                    "<9,13,1>": "CURR_STATUS",
 | 
			
		||||
                    "<9,13,2>": "5",
 | 
			
		||||
                    "<9,13,3>": "L",
 | 
			
		||||
                    "<9,13,4>": "C",
 | 
			
		||||
                    "<9,13,5>": "[CONV_ITEM_CURR_STATUS]",
 | 
			
		||||
                    "<9,13,6>": "Curr Status"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "<10>": "T",
 | 
			
		||||
@ -147,7 +163,17 @@
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<35>": "16766894",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
            "<2>": "-1",
 | 
			
		||||
            "<3>": "-1",
 | 
			
		||||
            "<4>": "-1",
 | 
			
		||||
            "<5>": "16777215",
 | 
			
		||||
            "<5>": "-2",
 | 
			
		||||
            "<6>": {
 | 
			
		||||
                "<6,1>": {
 | 
			
		||||
                    "<6,1,1>": "MS Sans Serif",
 | 
			
		||||
@ -91,7 +91,17 @@
 | 
			
		||||
            "<32>": "0",
 | 
			
		||||
            "<33>": "1",
 | 
			
		||||
            "<34>": "16777215",
 | 
			
		||||
            "<35>": "16777215"
 | 
			
		||||
            "<35>": "16777215",
 | 
			
		||||
            "<36>": "",
 | 
			
		||||
            "<37>": "",
 | 
			
		||||
            "<38>": "",
 | 
			
		||||
            "<39>": "",
 | 
			
		||||
            "<40>": "-2",
 | 
			
		||||
            "<41>": "1000",
 | 
			
		||||
            "<42>": "",
 | 
			
		||||
            "<43>": "",
 | 
			
		||||
            "<44>": "",
 | 
			
		||||
            "<45>": ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -235,7 +235,7 @@ Service SendReminders()
 | 
			
		||||
						IF CLType = 'E' THEN
 | 
			
		||||
							Desc	= CLRec<CALIB_LIST_EQ_DESC$>
 | 
			
		||||
							SN		= CLRec<CALIB_LIST_EQ_SN$>
 | 
			
		||||
							Loc		= CLRec<CALIB_LIST_EQ_LOC$
 | 
			
		||||
							Loc		= CLRec<CALIB_LIST_EQ_LOC$>
 | 
			
		||||
							NewLine = Desc:' (S/N: ':SN:') located in the ':Loc:' is due for calibration on ':NextCalDt:CRLF$
 | 
			
		||||
						END 
 | 
			
		||||
						IF CLType = 'S' THEN
 | 
			
		||||
 | 
			
		||||
@ -51,11 +51,11 @@ RETURN Result
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@ -77,82 +77,85 @@ ReactNoGF:
 | 
			
		||||
LUReactor:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	
 | 
			
		||||
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
			
		||||
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
			
		||||
	IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | 
			
		||||
	IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | 
			
		||||
	
 | 
			
		||||
Set_Status(0)
 | 
			
		||||
	Set_Status(0)
 | 
			
		||||
	
 | 
			
		||||
TypeOver = ''
 | 
			
		||||
TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
			
		||||
TypeOver<PTYPE$> 	= 'E'		;* Return entire row
 | 
			
		||||
	TypeOver = ''
 | 
			
		||||
	TypeOver<PSELECT$>	= '2'		;* Multiple Select
 | 
			
		||||
	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 '')
 | 
			
		||||
ColCnt = 7
 | 
			
		||||
	LineCnt = COUNT(ReactData,@FM) + (ReactData NE '')
 | 
			
		||||
	ColCnt = 7
 | 
			
		||||
	
 | 
			
		||||
FOR Line = 1 TO LineCnt
 | 
			
		||||
	FOR Column = 2 TO ColCnt
 | 
			
		||||
		stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
			
		||||
	NEXT Column
 | 
			
		||||
NEXT Line
 | 
			
		||||
	FOR Line = 1 TO LineCnt
 | 
			
		||||
		FOR Column = 2 TO ColCnt
 | 
			
		||||
			stat = Send_Message(@WINDOW:'.REACT_NO','COLOR_BY_POS',Column,Line,GREEN$)
 | 
			
		||||
		NEXT Column
 | 
			
		||||
	NEXT Line
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Cancel:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	
 | 
			
		||||
End_Dialog(@WINDOW,'')
 | 
			
		||||
	End_Dialog(@WINDOW,'')
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
PostEntries:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	
 | 
			
		||||
ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
			
		||||
Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
			
		||||
	ReactNos	= Get_Property(@WINDOW:'.REACT_NO','ARRAY')<COL$REACT_NO>
 | 
			
		||||
	Comment		= Get_Property(@WINDOW:'.COMMENT','DEFPROP')
 | 
			
		||||
	
 | 
			
		||||
LOOP
 | 
			
		||||
	TestChar = ReactNos[-1,1]
 | 
			
		||||
UNTIL TestChar NE @VM OR ReactNos = ''
 | 
			
		||||
	ReactNos[-1,1] = ''
 | 
			
		||||
REPEAT
 | 
			
		||||
	LOOP
 | 
			
		||||
		TestChar = ReactNos[-1,1]
 | 
			
		||||
	UNTIL TestChar NE @VM OR ReactNos = ''
 | 
			
		||||
		ReactNos[-1,1] = ''
 | 
			
		||||
	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
 | 
			
		||||
	EventType	= 'PD'											;* Passdown
 | 
			
		||||
	LoggedBy	= @USER4
 | 
			
		||||
		EventDTM	= OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')	;* Same DTM for all new records
 | 
			
		||||
		EventType	= 'PD'											;* Passdown
 | 
			
		||||
		LoggedBy	= @USER4
 | 
			
		||||
		
 | 
			
		||||
	ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
 | 
			
		||||
		ReactCnt = COUNT(ReactNos,@VM) + (ReactNos NE '')
 | 
			
		||||
		
 | 
			
		||||
	FOR I = 1 TO ReactCnt
 | 
			
		||||
		ReactNo		= ReactNos<1,I>
 | 
			
		||||
		CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
			
		||||
		FOR I = 1 TO ReactCnt
 | 
			
		||||
			ReactNo		= ReactNos<1,I>
 | 
			
		||||
			CurrMode	= XLATE('REACTOR',ReactNo,'CURR_MODE','X')
 | 
			
		||||
			
 | 
			
		||||
		obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
			
		||||
		EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
			
		||||
	NEXT I
 | 
			
		||||
			obj_React_Event('Create',ReactNo:@RM:EventDTM:@RM:EventType:@RM:LoggedBy:@RM:Comment:@RM:@RM:CurrMode)
 | 
			
		||||
			
 | 
			
		||||
END
 | 
			
		||||
			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
 | 
			
		||||
			
 | 
			
		||||
End_Dialog(@WINDOW,EventKeys)
 | 
			
		||||
			EventKeys<I> = ReactNo:'*':ICONV(EventDTM,'DT')
 | 
			
		||||
		NEXT I
 | 
			
		||||
		
 | 
			
		||||
	END else
 | 
			
		||||
		Msg(@Window, '', 'OK', '', 'Process Error':@FM:'React No(s) and Comment must not be null!')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ $INSERT TOOL_CLASS_EQUATES
 | 
			
		||||
$INSERT SECURITY_RIGHTS_EQU
 | 
			
		||||
$INSERT RTI_STYLE_EQUATES
 | 
			
		||||
$INSERT PROD_SPEC_EQUATES
 | 
			
		||||
$Insert PRS_STAGE_DEFECT_DEFAULTS_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU CRLF$	TO \0D0A\
 | 
			
		||||
 | 
			
		||||
@ -54,6 +55,11 @@ EQU COL$SPOTS			TO 8
 | 
			
		||||
EQU COL$FOV				TO 9
 | 
			
		||||
EQU COL$BL_DEFECTS		TO 10
 | 
			
		||||
 | 
			
		||||
EQU COL$BACK_SCRATCHES    TO 1
 | 
			
		||||
EQU COL$BACK_SCRATCH_LEN  TO 2
 | 
			
		||||
EQU COL$BACK_NODULES      TO 3
 | 
			
		||||
EQU COL$BACK_SPIKES       TO 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EQU COL$MET_TEST			TO 1
 | 
			
		||||
EQU COL$MET_PROP			TO 2
 | 
			
		||||
@ -511,67 +517,29 @@ SurfscanDefaults:
 | 
			
		||||
 | 
			
		||||
Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP')
 | 
			
		||||
 | 
			
		||||
IF Stage = 'FWI' OR Stage = 'LWI' THEN Stage = 'WFR'
 | 
			
		||||
 | 
			
		||||
BEGIN CASE
 | 
			
		||||
	CASE Stage = 'PRE' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '10'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '1'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '1'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= ''
 | 
			
		||||
		Vals<COL$SPIKES>		= ''
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '1'
 | 
			
		||||
		
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'PRE-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '0':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'PRE' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '10'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '10'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '10'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= ''
 | 
			
		||||
		Vals<COL$SPIKES>		= ''
 | 
			
		||||
		Vals<COL$SPOTS>			= '5'
 | 
			
		||||
		Vals<COL$FOV>			= '2'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '10'
 | 
			
		||||
		
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'PRE-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'WFR' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '20'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '1'
 | 
			
		||||
		Vals<COL$PITS>			= '1'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '1'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= '10'
 | 
			
		||||
		Vals<COL$SPIKES>		= '5'
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'FWI' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'FWI-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
 | 
			
		||||
	CASE Stage = 'WFR' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
		Vals = ''
 | 
			
		||||
		Vals<COL$LPD>			= '20'
 | 
			
		||||
		Vals<COL$SCRATCHES>		= '1'
 | 
			
		||||
		Vals<COL$SCRATCH_LEN>	= '10'
 | 
			
		||||
		Vals<COL$PITS>			= '20'
 | 
			
		||||
		Vals<COL$MOUNDS>		= '20'
 | 
			
		||||
		Vals<COL$STACK_FAULTS>	= '20'
 | 
			
		||||
		Vals<COL$SPIKES>		= '5'
 | 
			
		||||
		Vals<COL$SPOTS>			= '1'
 | 
			
		||||
		Vals<COL$FOV>			= '1'
 | 
			
		||||
		Vals<COL$BL_DEFECTS	>	= '20'
 | 
			
		||||
	CASE Stage = 'FWI' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'FWI-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE Stage = 'LWI' AND EntID = @WINDOW:'.VIRGIN_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'LWI-VIRGIN', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
 | 
			
		||||
	CASE Stage = 'LWI' AND EntID = @WINDOW:'.BL_DEFAULTS'
 | 
			
		||||
	    DefValRec = Xlate('PRS_STAGE_DEFECT_DEFAULTS', 'LWI-BURIED', '', 'X')
 | 
			
		||||
		CheckVals				= '1':@RM:'1'
 | 
			
		||||
		
 | 
			
		||||
	CASE 1
 | 
			
		||||
@ -579,6 +547,23 @@ BEGIN CASE
 | 
			
		||||
 | 
			
		||||
END CASE
 | 
			
		||||
 | 
			
		||||
Vals = ''
 | 
			
		||||
Vals<COL$LPD>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_LPD$>
 | 
			
		||||
Vals<COL$SCRATCHES>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCHES$>
 | 
			
		||||
Vals<COL$SCRATCH_LEN>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCH_LEN$>
 | 
			
		||||
Vals<COL$PITS>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_PITS$>
 | 
			
		||||
Vals<COL$MOUNDS>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_MOUNDS$>
 | 
			
		||||
Vals<COL$STACK_FAULTS>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_STACK_FAULTS$>
 | 
			
		||||
Vals<COL$SPIKES>		= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPIKES$>
 | 
			
		||||
Vals<COL$SPOTS>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPOTS$>
 | 
			
		||||
Vals<COL$FOV>			= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_FOV$>
 | 
			
		||||
Vals<COL$BL_DEFECTS>	= DefValRec<PRS_STAGE_DEFECT_DEFAULTS_FRONT_BL_DEFECTS$>
 | 
			
		||||
BackVals = ''
 | 
			
		||||
BackVals<COL$BACK_SCRATCHES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCHES$>
 | 
			
		||||
BackVals<COL$BACK_SCRATCH_LEN> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCH_LEN$>
 | 
			
		||||
BackVals<COL$BACK_NODULES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_NODULES$>
 | 
			
		||||
BackVals<COL$BACK_SPIKES> = DefValRec<PRS_STAGE_DEFECT_DEFAULTS_BACK_SPIKES$>
 | 
			
		||||
 | 
			
		||||
CurrVals = Get_Property(@WINDOW:'.VISUAL_PARMS','LIST')<1>
 | 
			
		||||
 | 
			
		||||
CONVERT @VM TO '' IN CurrVals
 | 
			
		||||
@ -608,6 +593,13 @@ IF Response THEN
 | 
			
		||||
 | 
			
		||||
	Set_Property(@WINDOW:'.VISUAL_PARMS','LIST',vpList)
 | 
			
		||||
	
 | 
			
		||||
	vpList = ''
 | 
			
		||||
	FOR I = 1 TO 4
 | 
			
		||||
		vpList<1,I> = BackVals<I>
 | 
			
		||||
	NEXT I
 | 
			
		||||
 | 
			
		||||
	Set_Property(@WINDOW:'.BSIDE_PARMS','LIST',vpList)
 | 
			
		||||
	
 | 
			
		||||
END 
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
@ -1235,3 +1227,5 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -582,170 +582,130 @@ Refresh:
 | 
			
		||||
    
 | 
			
		||||
    If @WINDOW EQ 'RDS_UNLOAD' then
 | 
			
		||||
            
 | 
			
		||||
        DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
		CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
			
		||||
		Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
			
		||||
		Set_Property(CtrlName, 'VISIBLE', True$)
 | 
			
		||||
		MetList        = Get_Property(CtrlName,'LIST')
 | 
			
		||||
		ThickOutOfSpec = False$
 | 
			
		||||
		CresOutOfSpec  = False$
 | 
			
		||||
		MLCnt          = COUNT(MetList,@FM) + (MetList NE '')
 | 
			
		||||
		FOR Line = 1 TO MLCnt
 | 
			
		||||
			IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
 | 
			
		||||
				MetResult        = MetList<Line,COL$UL_MET_RESULT>
 | 
			
		||||
				MetMin           = MetList<Line,COL$UL_MET_MIN>
 | 
			
		||||
				MetMax           = MetList<Line,COL$UL_MET_MAX>
 | 
			
		||||
				PhaseMin         = MetList<Line,COL$UL_MET_PHASE_MIN>
 | 
			
		||||
				PhaseResult      = MetList<Line,COL$UL_MET_PHASE_RESULT>
 | 
			
		||||
				ScanRecipe       = MetList<Line,COL$UL_MET_RECIPE>
 | 
			
		||||
				PSN              = Get_Property(@Window : '.PSN', 'TEXT')
 | 
			
		||||
				PRSStageKey      = PSN:'*UNLOAD'
 | 
			
		||||
				MetTest          = MetList<Line,COL$UL_MET_TEST>
 | 
			
		||||
				PRSStageRec      = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
 | 
			
		||||
				SpecTests        = PRSStageRec<PRS_STAGE_MET_TEST$>
 | 
			
		||||
				SpecRecipe       = ''
 | 
			
		||||
				RDSNo            = Get_Property(@Window:'.RDS_NO', 'TEXT')
 | 
			
		||||
				QAMetKey         = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
			
		||||
				WOMatQARec       = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
 | 
			
		||||
				DataPoints       = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
 | 
			
		||||
				Begin Case
 | 
			
		||||
					Case MetTest EQ 'THICK_ONLY'
 | 
			
		||||
						// Check each point to see if any are out of spec
 | 
			
		||||
						For each DataPoint in DataPoints using @SVM setting ThickIndex
 | 
			
		||||
						Until DataPoint EQ ''
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case ThickIndex GT 10
 | 
			
		||||
									Null
 | 
			
		||||
								Case (DataPoint EQ '')
 | 
			
		||||
									ThickOutOfSpec = True$
 | 
			
		||||
								Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
 | 
			
		||||
									ThickOutOfSpec = True$
 | 
			
		||||
							End Case
 | 
			
		||||
						Next DataPoint
 | 
			
		||||
						
 | 
			
		||||
        If (DevelopmentFlag EQ True$) then
 | 
			
		||||
					Case MetTest EQ 'CRES'
 | 
			
		||||
						// Check critical points to see if any are out of spec (both HgCV and Phase)
 | 
			
		||||
						CriticalPoints = '1,2,5,6,9'
 | 
			
		||||
						For each DataPoint in DataPoints using @SVM setting CresIndex
 | 
			
		||||
						Until DataPoint EQ ''
 | 
			
		||||
							HgCVDataPoint  = DataPoint[1, 'F':@TM]
 | 
			
		||||
							PhaseDataPoint = DataPoint[-1, 'B':@TM]
 | 
			
		||||
							CriticalPoint  = Index(CriticalPoints, CresIndex, 1)
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case (HgCVDataPoint EQ '') and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (PhaseDataPoint EQ '') and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
								Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
 | 
			
		||||
									CresOutOfSpec = True$
 | 
			
		||||
							End Case
 | 
			
		||||
						Next DataPoint
 | 
			
		||||
				End Case
 | 
			
		||||
				QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
 | 
			
		||||
				Locate MetTest in SpecTests using @VM setting vPos then
 | 
			
		||||
					SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
 | 
			
		||||
				end                
 | 
			
		||||
				NoError = True$
 | 
			
		||||
 | 
			
		||||
            CtrlName       = @WINDOW:'.EDT_QA_MET'
 | 
			
		||||
            Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
 | 
			
		||||
            Set_Property(CtrlName, 'VISIBLE', True$)
 | 
			
		||||
            MetList        = Get_Property(CtrlName,'LIST')
 | 
			
		||||
            ThickOutOfSpec = False$
 | 
			
		||||
            CresOutOfSpec  = False$
 | 
			
		||||
            MLCnt          = COUNT(MetList,@FM) + (MetList NE '')
 | 
			
		||||
            FOR Line = 1 TO MLCnt
 | 
			
		||||
                IF MetList<Line,COL$UL_MET_TEST> NE '' THEN
 | 
			
		||||
                    MetResult        = MetList<Line,COL$UL_MET_RESULT>
 | 
			
		||||
                    MetMin           = MetList<Line,COL$UL_MET_MIN>
 | 
			
		||||
                    MetMax           = MetList<Line,COL$UL_MET_MAX>
 | 
			
		||||
                    PhaseMin         = MetList<Line,COL$UL_MET_PHASE_MIN>
 | 
			
		||||
                    PhaseResult      = MetList<Line,COL$UL_MET_PHASE_RESULT>
 | 
			
		||||
                    ScanRecipe       = MetList<Line,COL$UL_MET_RECIPE>
 | 
			
		||||
                    PSN              = Get_Property(@Window : '.PSN', 'TEXT')
 | 
			
		||||
                    PRSStageKey      = PSN:'*UNLOAD'
 | 
			
		||||
                    MetTest          = MetList<Line,COL$UL_MET_TEST>
 | 
			
		||||
                    PRSStageRec      = Database_Services('ReadDataRow', 'PRS_STAGE', PRSStageKey)
 | 
			
		||||
                    SpecTests        = PRSStageRec<PRS_STAGE_MET_TEST$>
 | 
			
		||||
                    SpecRecipe       = ''
 | 
			
		||||
                    RDSNo            = Get_Property(@Window:'.RDS_NO', 'TEXT')
 | 
			
		||||
                    QAMetKey         = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
 | 
			
		||||
                    WOMatQARec       = Database_Services('ReadDataRow', 'WO_MAT_QA', QAMetKey)
 | 
			
		||||
                    DataPoints       = WOMatQARec<WO_MAT_QA_DATA_POINTS$, Line>
 | 
			
		||||
                    Begin Case
 | 
			
		||||
                        Case MetTest EQ 'THICK_ONLY'
 | 
			
		||||
                            // Check each point to see if any are out of spec
 | 
			
		||||
                            For each DataPoint in DataPoints using @SVM setting ThickIndex
 | 
			
		||||
                            Until DataPoint EQ ''
 | 
			
		||||
                                Begin Case
 | 
			
		||||
                                    Case ThickIndex GT 10
 | 
			
		||||
                                        Null
 | 
			
		||||
                                    Case (DataPoint EQ '')
 | 
			
		||||
                                        ThickOutOfSpec = True$
 | 
			
		||||
                                    Case (DataPoint GT MetMax) OR (DataPoint LT MetMin)
 | 
			
		||||
                                        ThickOutOfSpec = True$
 | 
			
		||||
                                End Case
 | 
			
		||||
                            Next DataPoint
 | 
			
		||||
				If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
 | 
			
		||||
					Color = YELLOW$
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                        Case MetTest EQ 'CRES'
 | 
			
		||||
                            // Check critical points to see if any are out of spec (both HgCV and Phase)
 | 
			
		||||
                            CriticalPoints = '1,2,5,6,9'
 | 
			
		||||
                            For each DataPoint in DataPoints using @SVM setting CresIndex
 | 
			
		||||
                            Until DataPoint EQ ''
 | 
			
		||||
                                HgCVDataPoint  = DataPoint[1, 'F':@TM]
 | 
			
		||||
                                PhaseDataPoint = DataPoint[-1, 'B':@TM]
 | 
			
		||||
                                CriticalPoint  = Index(CriticalPoints, CresIndex, 1)
 | 
			
		||||
                                Begin Case
 | 
			
		||||
                                    Case (HgCVDataPoint EQ '') and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (PhaseDataPoint EQ '') and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (HgCVDataPoint GT MetMax) OR (HgCVDataPoint LT MetMin) and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                    Case (PhaseDataPoint LT PhaseMin) and CriticalPoint
 | 
			
		||||
                                        CresOutOfSpec = True$
 | 
			
		||||
                                End Case
 | 
			
		||||
                            Next DataPoint
 | 
			
		||||
                    End Case
 | 
			
		||||
                    QAMetOutofSpec = (ThickOutOfSpec or CresOutOfSpec)
 | 
			
		||||
                    Locate MetTest in SpecTests using @VM setting vPos then
 | 
			
		||||
                        SpecRecipe = PRSStageRec<PRS_STAGE_MET_RECIPE$, vPos>
 | 
			
		||||
                    end                
 | 
			
		||||
                    NoError = True$
 | 
			
		||||
				If QAMetOutofSpec EQ True$ then
 | 
			
		||||
					Color   = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
 | 
			
		||||
					stat    = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    If (MetList<Line,COL$UL_MET_RESULT> EQ '') then
 | 
			
		||||
                        Color = YELLOW$
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
				If (MetResult LT MetMin) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    If QAMetOutofSpec EQ True$ then
 | 
			
		||||
                        Color   = BYELLOW$:@FM:BLACK$:@FM:BYELLOW$:@FM:BLACK$
 | 
			
		||||
                        stat    = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
				If (MetResult GT MetMax) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    If (MetResult LT MetMin) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
				If (PhaseResult LT PhaseMin) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    If (MetResult GT MetMax) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
				QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
 | 
			
		||||
				DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
 | 
			
		||||
				If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
 | 
			
		||||
					Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
					stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
 | 
			
		||||
					NoError = False$
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    If (PhaseResult LT PhaseMin) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_PHASE_RESULT, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
				If (NoError EQ True$) then
 | 
			
		||||
					Color = GREEN$
 | 
			
		||||
					stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
                    QAFailReason = WOMatQARec<WO_MAT_QA_FAIL_REASON$, Line>
 | 
			
		||||
                    DetectedFail = Index(QAFailReason, 'Number of data points is less than the required amount', 1)
 | 
			
		||||
                    If (ScanRecipe NE SpecRecipe) OR (DetectedFail) then
 | 
			
		||||
                        Color = RED$:@FM:'':@FM:BRED$:@FM:''
 | 
			
		||||
                        stat = Send_Message(CtrlName, 'COLOR_BY_POS', COL$UL_MET_RECIPE, Line, Color)
 | 
			
		||||
                        NoError = False$
 | 
			
		||||
                    end
 | 
			
		||||
			END	ELSE
 | 
			
		||||
				Color = GREEN$
 | 
			
		||||
				stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
			END
 | 
			
		||||
			
 | 
			
		||||
                    If (NoError EQ True$) then
 | 
			
		||||
                        Color = GREEN$
 | 
			
		||||
                        stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
                    end
 | 
			
		||||
		NEXT Line
 | 
			
		||||
		
 | 
			
		||||
                END	ELSE
 | 
			
		||||
                    Color = GREEN$
 | 
			
		||||
                    stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
 | 
			
		||||
                END
 | 
			
		||||
		Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
 | 
			
		||||
		
 | 
			
		||||
            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 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
 | 
			
		||||
		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 of check for Unload OR Post_Epi windows
 | 
			
		||||
    
 | 
			
		||||
    ****************************************************************************************************************************************
 | 
			
		||||
@ -2669,9 +2629,8 @@ MetTestDC:
 | 
			
		||||
    Lines	  = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
 | 
			
		||||
    TestLine  = Lines<CurrRow>
 | 
			
		||||
    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'		; Props := 'LIST'
 | 
			
		||||
    end else
 | 
			
		||||
@ -2708,8 +2667,7 @@ MetTestDC:
 | 
			
		||||
    BEGIN CASE
 | 
			
		||||
        CASE MetTest EQ ''
 | 
			
		||||
            Null
 | 
			
		||||
        
 | 
			
		||||
        CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
 | 
			
		||||
        CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
 | 
			
		||||
            ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
 | 
			
		||||
            Send_Event(@Window, "READ")
 | 
			
		||||
        CASE Otherwise$
 | 
			
		||||
@ -2863,57 +2821,47 @@ return
 | 
			
		||||
 | 
			
		||||
RefreshWaferCounterData:
 | 
			
		||||
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
			
		||||
	QtyBackColor = GREEN$
 | 
			
		||||
	RDSNo        = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
			
		||||
	If RDSNo NE '' then 
 | 
			
		||||
		FqaWcRec        = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
 | 
			
		||||
		WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
		Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
		WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
 | 
			
		||||
		Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)            
 | 
			
		||||
		QtyBackColor = GREEN$
 | 
			
		||||
        RDSNo        = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
			
		||||
        If RDSNo NE '' then 
 | 
			
		||||
			FqaWcRec        = Wafer_Counter_Services('GetLastScan', RDSNo, 'QA')
 | 
			
		||||
			WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
			Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
			WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')
 | 
			
		||||
			Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
		*****************************************
 | 
			
		||||
		* WaferCounter - Wafers Quantity Section *
 | 
			
		||||
		*****************************************
 | 
			
		||||
		If (WaferCounterQty NE '') then
 | 
			
		||||
			If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
 | 
			
		||||
		end else
 | 
			
		||||
			QtyBackColor = ORANGE$
 | 
			
		||||
		end			
 | 
			
		||||
		
 | 
			
		||||
			*****************************************
 | 
			
		||||
			* WaferCounter - Wafers Quantity Section *
 | 
			
		||||
			*****************************************
 | 
			
		||||
			If (WaferCounterQty NE '') then
 | 
			
		||||
				If (WaferCounterQty NE WafersOut) then QtyBackColor = RED$
 | 
			
		||||
			end else
 | 
			
		||||
				QtyBackColor = ORANGE$
 | 
			
		||||
			end			
 | 
			
		||||
			
 | 
			
		||||
			WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
 | 
			
		||||
			WaferSize = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
			If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
				WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					WCCurrMode = ''
 | 
			
		||||
					If RowExists('TOOL', WCToolID) then
 | 
			
		||||
						WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
						WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
					end
 | 
			
		||||
		WaferSize = Xlate('RDS', RDSNo, 'WAFER_SIZE', 'X')
 | 
			
		||||
		WaferSize = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
		If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
			WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
			If Error_Services('NoError') then 
 | 
			
		||||
				WCCurrMode = ''
 | 
			
		||||
				If RowExists('TOOL', WCToolID) then
 | 
			
		||||
					WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
					WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
					Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
					ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
				end
 | 
			
		||||
			end else
 | 
			
		||||
				ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
 | 
			
		||||
				ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for RDS "':RDSNo:'".')
 | 
			
		||||
		end			
 | 
			
		||||
		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
 | 
			
		||||
	end
 | 
			
		||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ Declare Function Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.I
 | 
			
		||||
Declare Function Send_Message, Msg, Security_Check, obj_React_Item, Select_Into, MemberOf, Create_Dialog, obj_Calendar
 | 
			
		||||
Declare Function GetAsyncKeyState, obj_Tables, MemberOf, Environment_Services, Database_Services, Rds_Services
 | 
			
		||||
Declare Function Reactor_Services, Error_Services, React_Servs_Services, Reactor_Log_Services, Send_Event, SRP_List
 | 
			
		||||
Declare Function Nica_Orders_Services
 | 
			
		||||
Declare Function Nica_Orders_Services, SRP_Date, React_Item_Services, SRP_Datetime, Datetime
 | 
			
		||||
 | 
			
		||||
$Insert MSG_EQUATES
 | 
			
		||||
$Insert APPCOLORS
 | 
			
		||||
@ -1229,64 +1229,51 @@ SvcsOptions:
 | 
			
		||||
			If ItemType NE '' then
 | 
			
		||||
				
 | 
			
		||||
				RetVal = ''
 | 
			
		||||
				
 | 
			
		||||
				ItemType = ICONV(ItemType,'[CONV_CODE_DESC,REACT_ITEM_TYPE]')
 | 
			
		||||
				
 | 
			
		||||
				OPEN 'DICT.REACT_ITEM' to DictReactItem else
 | 
			
		||||
					ErrMsg('Unable to open DICT.REACT_ITEM')
 | 
			
		||||
					return
 | 
			
		||||
				end
 | 
			
		||||
				RIKeys   = React_Item_Services('GetReactItems', ItemType, 'N,U')
 | 
			
		||||
				
 | 
			
		||||
				SearchString  = 'RI_TYPE':@VM:ItemType:@FM
 | 
			
		||||
				SearchString := 'CURR_STATUS':@VM:'N':@VM:'U':@FM 
 | 
			
		||||
				If Error_Services('NoError') then
 | 
			
		||||
				    
 | 
			
		||||
				RIKeys = ''
 | 
			
		||||
				Option = ''
 | 
			
		||||
				Flag = ''
 | 
			
		||||
                    TypeOver            = ''
 | 
			
		||||
                    TypeOVer<PMODE$>    = 'K'
 | 
			
		||||
                    TypeOver<PDISPLAY$> = RIKeys
 | 
			
		||||
                    RetVal              = Popup(@Window,TypeOver,'REACT_ITEM')
 | 
			
		||||
                    
 | 
			
		||||
				Btree.Extract(SearchString,'REACT_ITEM',DictReactItem,RIKeys,Option,Flag)
 | 
			
		||||
				If Get_Status(errCode) then
 | 
			
		||||
					ErrMsg(errCode)
 | 
			
		||||
					return
 | 
			
		||||
				end
 | 
			
		||||
                    If RetVal NE '' then
 | 
			
		||||
                        obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
 | 
			
		||||
                        
 | 
			
		||||
				TypeOver = ''
 | 
			
		||||
				TypeOVer<PMODE$> = 'K'
 | 
			
		||||
				TypeOver<PDISPLAY$> = RIKeys
 | 
			
		||||
				RetVal = Popup(@Window,TypeOver,'REACT_ITEM')
 | 
			
		||||
                        RIRec = XLATE('REACT_ITEM',RetVal,'','X')
 | 
			
		||||
                        
 | 
			
		||||
				If RetVal NE '' then
 | 
			
		||||
					obj_AppWindow('LUValReturn',RetVal:@RM:@Window:'.SERV_INFO':@RM:SelPos)
 | 
			
		||||
                        If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
 | 
			
		||||
                            CardWindow	= 'REACT_ITEM'
 | 
			
		||||
                            CardKey		= RetVal
 | 
			
		||||
                            DefaultRec	= ''
 | 
			
		||||
                            NewCardCtrl	= ''
 | 
			
		||||
                            RecalcCtrl	= @Window:'.SERV_INFO'
 | 
			
		||||
                            RecalcPos	= SelPos
 | 
			
		||||
                            RetCtrl		= @Window:'.SERV_INFO'
 | 
			
		||||
                            RetPos		= SelPos
 | 
			
		||||
                            
 | 
			
		||||
					RIRec = XLATE('REACT_ITEM',RetVal,'','X')
 | 
			
		||||
                            oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
 | 
			
		||||
                            
 | 
			
		||||
					If RIRec<REACT_ITEM_RI_TYPE$> = 'T' then
 | 
			
		||||
						CardWindow	= 'REACT_ITEM'
 | 
			
		||||
						CardKey		= RetVal
 | 
			
		||||
						DefaultRec	= ''
 | 
			
		||||
						NewCardCtrl	= ''
 | 
			
		||||
						RecalcCtrl	= @Window:'.SERV_INFO'
 | 
			
		||||
						RecalcPos	= SelPos
 | 
			
		||||
						RetCtrl		= @Window:'.SERV_INFO'
 | 
			
		||||
						RetPos		= SelPos
 | 
			
		||||
                            obj_AppWindow('ViewNewCard',oAParms)
 | 
			
		||||
                            
 | 
			
		||||
						oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
 | 
			
		||||
                            Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
 | 
			
		||||
                            
 | 
			
		||||
						obj_AppWindow('ViewNewCard',oAParms)
 | 
			
		||||
                            If Get_Status(errCode) then
 | 
			
		||||
                                ErrMsg(errCode)
 | 
			
		||||
                            end
 | 
			
		||||
                        end
 | 
			
		||||
                        
 | 
			
		||||
						Set_Property('REACT_ITEM.TUBE_GRADE','FOCUS',1)
 | 
			
		||||
						
 | 
			
		||||
						If Get_Status(errCode) then
 | 
			
		||||
							ErrMsg(errCode)
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					GoSub Refresh
 | 
			
		||||
                        GoSub Refresh
 | 
			
		||||
                    end				    
 | 
			
		||||
				end else
 | 
			
		||||
				    Error_Services('DisplayError')
 | 
			
		||||
				end
 | 
			
		||||
				
 | 
			
		||||
			end	;* End of check for null SNReq
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
	GoSub Refresh
 | 
			
		||||
@ -1877,4 +1864,3 @@ ColorRemRiTable:
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1099,7 +1099,7 @@ SignSupVer:
 | 
			
		||||
    ************************************************************************
 | 
			
		||||
    WMOKey = Get_Property(@WINDOW,'ID')
 | 
			
		||||
    PSNo = Get_Property(@WINDOW:'.PS_NO)','TEXT')
 | 
			
		||||
    VerInst = XLATE('PRS_STAGE',PSNo:'*QA',PRS_STAGE_INST$,'X')
 | 
			
		||||
    VerInst = XLATE('PRS_STAGE',PSNo:'*MO_QA',PRS_STAGE_INST$,'X')
 | 
			
		||||
    IF (VerInst NE '') THEN
 | 
			
		||||
        Yes = Dialog_Box( 'RDS_VER', @WINDOW, VerInst )
 | 
			
		||||
        IF NOT(Yes) THEN
 | 
			
		||||
@ -1107,29 +1107,25 @@ SignSupVer:
 | 
			
		||||
        END
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
	****************************************
 | 
			
		||||
	* Verify the Wafer Counter information *
 | 
			
		||||
	****************************************
 | 
			
		||||
 | 
			
		||||
        ****************************************
 | 
			
		||||
        * Verify the Wafer Counter information *
 | 
			
		||||
        ****************************************
 | 
			
		||||
	WafersOut       = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')        
 | 
			
		||||
	WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
	
 | 
			
		||||
        WafersOut       = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')        
 | 
			
		||||
        WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
        
 | 
			
		||||
        ************************************
 | 
			
		||||
        * Wafer Counter - Quantity Section *
 | 
			
		||||
        ************************************
 | 
			
		||||
        If (WaferCounterQty NE '') then
 | 
			
		||||
            If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
                ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
 | 
			
		||||
                RETURN 0
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
            RETURN 0
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
	************************************
 | 
			
		||||
	* Wafer Counter - Quantity Section *
 | 
			
		||||
	************************************
 | 
			
		||||
	If (WaferCounterQty NE '') then
 | 
			
		||||
		If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
			ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Filled quantities do not match.')
 | 
			
		||||
			RETURN 0
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
		RETURN 0
 | 
			
		||||
	end
 | 
			
		||||
    
 | 
			
		||||
    **************************
 | 
			
		||||
    * Verify user's password *
 | 
			
		||||
@ -1711,129 +1707,142 @@ AddMakeup:
 | 
			
		||||
            END
 | 
			
		||||
        NEXT I
 | 
			
		||||
        
 | 
			
		||||
        Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
 | 
			
		||||
        Continue     = True$
 | 
			
		||||
        ShowSpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$, 'X')
 | 
			
		||||
        If ShowSpecInst then
 | 
			
		||||
        	SpecInst = Xlate('PROD_SPEC', PSNo, PROD_SPEC_SPEC_INST$, 'X')
 | 
			
		||||
        	If SpecInst NE '' then 
 | 
			
		||||
        		Continue = Dialog_Box('NDW_ACKNOWLEDGE_MESSAGE', @Window, SpecInst)
 | 
			
		||||
        		If Not(Continue) then
 | 
			
		||||
        			Msg(@Window, '', 'OK', '', 'Process Error':@FM:'This PSN requires you to acknowledge special instructions to add makeup wafers.')
 | 
			
		||||
        		end
 | 
			
		||||
        	end
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        Begin Case
 | 
			
		||||
            Case Response EQ True$
 | 
			
		||||
                // User requested to convert the current cassette into a makeup box.
 | 
			
		||||
				WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					SAPBatchNo      = WOMatRec<WO_MAT_SAP_BATCH_NO$>
 | 
			
		||||
					SAPTXDtm        = WOMatRec<WO_MAT_SAP_TX_DTM$>
 | 
			
		||||
					AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
 | 
			
		||||
					HasBatchNo      = (SAPBatchNo NE '')
 | 
			
		||||
					FullBoxReject   = (SAPBatchNo[-1, 1] = 'R')
 | 
			
		||||
					Begin Case
 | 
			
		||||
						Case AwaitingBatchNo
 | 
			
		||||
							InvalidRequest = True$
 | 
			
		||||
							ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
 | 
			
		||||
							Return
 | 
			
		||||
						Case FullBoxReject
 | 
			
		||||
							InvalidRequest = True$
 | 
			
		||||
							ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
 | 
			
		||||
							Return
 | 
			
		||||
						Case HasBatchNo
 | 
			
		||||
							// Operation limited to LEAD and SUPERVISOR groups
 | 
			
		||||
							OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
 | 
			
		||||
							Response    = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
 | 
			
		||||
							
 | 
			
		||||
							Begin Case
 | 
			
		||||
								Case Response EQ 1
 | 
			
		||||
									Response = True$        ; // User Clicked Override
 | 
			
		||||
								Case Response EQ 2
 | 
			
		||||
									Response = False$       ; // User Clicked Cancel
 | 
			
		||||
								Case Response EQ char(27)
 | 
			
		||||
									Response = False$       ; // User Pressed Escape Key
 | 
			
		||||
							End Case            
 | 
			
		||||
							
 | 
			
		||||
							If Response EQ True$ then
 | 
			
		||||
								Response    = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
 | 
			
		||||
								Authorized  = Response<1>
 | 
			
		||||
							end else
 | 
			
		||||
								Authorized  = False$
 | 
			
		||||
							end
 | 
			
		||||
							If Not(Authorized) then Return
 | 
			
		||||
						Case Otherwise$
 | 
			
		||||
							Null
 | 
			
		||||
					End Case                  
 | 
			
		||||
 | 
			
		||||
					AvailMU_WMOKeys = ''
 | 
			
		||||
					UserResp        = Response
 | 
			
		||||
					MakeupBox       = ''
 | 
			
		||||
        If Continue then 
 | 
			
		||||
			Response = Dialog_Box('NDW_MAKEUP_WAFERS', @Window, WOMatKey)
 | 
			
		||||
			
 | 
			
		||||
			Begin Case
 | 
			
		||||
				Case Response EQ True$
 | 
			
		||||
					// User requested to convert the current cassette into a makeup box.
 | 
			
		||||
					// Verify the quantity before proceeding.
 | 
			
		||||
					If WMOutKey NE '' then
 | 
			
		||||
						Parms    = ''
 | 
			
		||||
						Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
 | 
			
		||||
						Parms<2> = 0        ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
						Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
						Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)                
 | 
			
		||||
						If Proceed NE True$ then Return
 | 
			
		||||
					WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
					If Error_Services('NoError') then 
 | 
			
		||||
						SAPBatchNo      = WOMatRec<WO_MAT_SAP_BATCH_NO$>
 | 
			
		||||
						SAPTXDtm        = WOMatRec<WO_MAT_SAP_TX_DTM$>
 | 
			
		||||
						AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') )
 | 
			
		||||
						HasBatchNo      = (SAPBatchNo NE '')
 | 
			
		||||
						FullBoxReject   = (SAPBatchNo[-1, 1] = 'R')
 | 
			
		||||
						Begin Case
 | 
			
		||||
							Case AwaitingBatchNo
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
								ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.')
 | 
			
		||||
								Return
 | 
			
		||||
							Case FullBoxReject
 | 
			
		||||
								InvalidRequest = True$
 | 
			
		||||
								ErrMsg('WARNING: Cassette is ineligible to be converted as it is a full box reject.')
 | 
			
		||||
								Return
 | 
			
		||||
							Case HasBatchNo
 | 
			
		||||
								// Operation limited to LEAD and SUPERVISOR groups
 | 
			
		||||
								OverrideMsg = "Cassette has a batch number. SUPERVISOR or LEAD must override."
 | 
			
		||||
								Response    = Msg(@Window, '', 'OVERRIDE', '', OverrideMsg)
 | 
			
		||||
								
 | 
			
		||||
								Begin Case
 | 
			
		||||
									Case Response EQ 1
 | 
			
		||||
										Response = True$        ; // User Clicked Override
 | 
			
		||||
									Case Response EQ 2
 | 
			
		||||
										Response = False$       ; // User Clicked Cancel
 | 
			
		||||
									Case Response EQ char(27)
 | 
			
		||||
										Response = False$       ; // User Pressed Escape Key
 | 
			
		||||
								End Case            
 | 
			
		||||
								
 | 
			
		||||
								If Response EQ True$ then
 | 
			
		||||
									Response    = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:'LEAD':@VM:'SUPERVISOR')
 | 
			
		||||
									Authorized  = Response<1>
 | 
			
		||||
								end else
 | 
			
		||||
									Authorized  = False$
 | 
			
		||||
								end
 | 
			
		||||
								If Not(Authorized) then Return
 | 
			
		||||
							Case Otherwise$
 | 
			
		||||
								Null
 | 
			
		||||
						End Case                  
 | 
			
		||||
 | 
			
		||||
						AvailMU_WMOKeys = ''
 | 
			
		||||
						UserResp        = Response
 | 
			
		||||
						MakeupBox       = ''
 | 
			
		||||
						
 | 
			
		||||
						// User requested to convert the current cassette into a makeup box.
 | 
			
		||||
						// Verify the quantity before proceeding.
 | 
			
		||||
						If WMOutKey NE '' then
 | 
			
		||||
							Parms    = ''
 | 
			
		||||
							Parms<1> = WMOutKey ; // Cassette to verify wafer count of.
 | 
			
		||||
							Parms<2> = 0        ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
							Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)                
 | 
			
		||||
							If Proceed NE True$ then Return
 | 
			
		||||
						end else
 | 
			
		||||
							ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
 | 
			
		||||
						end
 | 
			
		||||
						
 | 
			
		||||
						CheckValue = 1
 | 
			
		||||
						
 | 
			
		||||
						FieldNo = WO_MAT_EPO_MAKEUP_BOX$
 | 
			
		||||
						obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)		;* Set WMO_MAKEUP flag on WM_OUT
 | 
			
		||||
						IF Get_Status(errCode) THEN ErrMsg(errCode)
 | 
			
		||||
						
 | 
			
		||||
						Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue)		;* Make this the makeup box
 | 
			
		||||
						Send_Event(@WINDOW,'WRITE')										;* Write the record
 | 
			
		||||
						
 | 
			
		||||
						WMOKey = WONo:'*':ProcStepNo:'*':CassNo
 | 
			
		||||
						obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)				;* Reread the updated record
 | 
			
		||||
						
 | 
			
		||||
						Return
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Error starting wafer counter check. WM_OUT key is missing.')
 | 
			
		||||
						ErrMsg('WARNING: Error reading WO_MAT record.')
 | 
			
		||||
						Return						
 | 
			
		||||
					end
 | 
			
		||||
				Case Response EQ ''
 | 
			
		||||
					// User has cancelled this process.
 | 
			
		||||
					Return
 | 
			
		||||
				Case Otherwise$
 | 
			
		||||
					// User has selected a makeup box to use and backfill.
 | 
			
		||||
					AvailMU_WMOKeys = Response
 | 
			
		||||
					MakeupBox       = Response
 | 
			
		||||
					MuWfrsNeeded    = SelCnt
 | 
			
		||||
					If AvailMU_WMOKeys NE '' then 
 | 
			
		||||
						// Wafer counter check - Account for the possibility of selecting more than one makeup box.
 | 
			
		||||
						For each MuWmoKey in AvailMU_WMOKeys using @FM
 | 
			
		||||
							MuWoMatKey   = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
 | 
			
		||||
							QtyAdj       = MuWfrsNeeded
 | 
			
		||||
							CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
 | 
			
		||||
							If MuWfrsNeeded GT CurrMuWfrCnt then
 | 
			
		||||
								QtyAdj        = CurrMuWfrCnt
 | 
			
		||||
								MuWfrsNeeded -= CurrMuWfrCnt
 | 
			
		||||
							end
 | 
			
		||||
							Parms    = ''
 | 
			
		||||
							Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
 | 
			
		||||
							Parms<2> = QtyAdj   ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
							Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
							Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
							If Proceed NE True$ then Return
 | 
			
		||||
						Next MuWmoKey
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					CheckValue = 1
 | 
			
		||||
					* Signature block added 10/6/2010 JCH  *
 | 
			
		||||
					Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
 | 
			
		||||
					
 | 
			
		||||
					FieldNo = WO_MAT_EPO_MAKEUP_BOX$
 | 
			
		||||
					obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue)		;* Set WMO_MAKEUP flag on WM_OUT
 | 
			
		||||
					IF Get_Status(errCode) THEN ErrMsg(errCode)
 | 
			
		||||
					IF NOT(Valid) THEN RETURN		;* User is not worthy or can't type
 | 
			
		||||
					
 | 
			
		||||
					Set_Property(@WINDOW:'.MAKEUP_BOX','DEFPROP',CheckValue)		;* Make this the makeup box
 | 
			
		||||
					Send_Event(@WINDOW,'WRITE')										;* Write the record
 | 
			
		||||
					Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
					
 | 
			
		||||
					WMOKey = WONo:'*':ProcStepNo:'*':CassNo
 | 
			
		||||
					obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WMOKey)				;* Reread the updated record
 | 
			
		||||
					
 | 
			
		||||
					Return
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg('WARNING: Error reading WO_MAT record.')
 | 
			
		||||
					Return						
 | 
			
		||||
				end
 | 
			
		||||
            Case Response EQ ''
 | 
			
		||||
                // User has cancelled this process.
 | 
			
		||||
                Return
 | 
			
		||||
            Case Otherwise$
 | 
			
		||||
                // User has selected a makeup box to use and backfill.
 | 
			
		||||
                AvailMU_WMOKeys = Response
 | 
			
		||||
                MakeupBox       = Response
 | 
			
		||||
                MuWfrsNeeded    = SelCnt
 | 
			
		||||
                If AvailMU_WMOKeys NE '' then 
 | 
			
		||||
                    // Wafer counter check - Account for the possibility of selecting more than one makeup box.
 | 
			
		||||
                    For each MuWmoKey in AvailMU_WMOKeys using @FM
 | 
			
		||||
                        MuWoMatKey   = Field(MuWmoKey, '*', 1):'*':Field(MuWmoKey, '*', 3)
 | 
			
		||||
                        QtyAdj       = MuWfrsNeeded
 | 
			
		||||
                        CurrMuWfrCnt = obj_WO_Mat('CurrWaferCnt', MuWoMatKey)
 | 
			
		||||
                        If MuWfrsNeeded GT CurrMuWfrCnt then
 | 
			
		||||
                            QtyAdj        = CurrMuWfrCnt
 | 
			
		||||
                            MuWfrsNeeded -= CurrMuWfrCnt
 | 
			
		||||
                        end
 | 
			
		||||
                        Parms    = ''
 | 
			
		||||
                        Parms<1> = MuWmoKey ; // Cassette to verify wafer count of.
 | 
			
		||||
                        Parms<2> = QtyAdj   ; // Wafer count adjustment - 0 because converting box.
 | 
			
		||||
                        Parms<3> = 'MU'     ; // Wafer counter tool location
 | 
			
		||||
                        Proceed  = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms)
 | 
			
		||||
                        If Proceed NE True$ then Return
 | 
			
		||||
                    Next MuWmoKey
 | 
			
		||||
                end
 | 
			
		||||
                
 | 
			
		||||
                * Signature block added 10/6/2010 JCH  *
 | 
			
		||||
				Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
 | 
			
		||||
				
 | 
			
		||||
				IF NOT(Valid) THEN RETURN		;* User is not worthy or can't type
 | 
			
		||||
				
 | 
			
		||||
				Send_Event(@WINDOW,'WRITE')
 | 
			
		||||
				
 | 
			
		||||
				obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
 | 
			
		||||
				//Remove the signatures for the WO_MAT_QA record because they are changing its results.
 | 
			
		||||
				WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
 | 
			
		||||
				Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
 | 
			
		||||
				obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
 | 
			
		||||
				
 | 
			
		||||
				RETURN
 | 
			
		||||
        End Case
 | 
			
		||||
					obj_WM_Out('AddMakeupWafers',WMOutKey:@RM:EmptySlots:@RM:MakeupBox)
 | 
			
		||||
					//Remove the signatures for the WO_MAT_QA record because they are changing its results.
 | 
			
		||||
					WOMatQaKey = Field(WMOutKey, '*', 1) : '*' : Field(WMOutKey, '*', 3)
 | 
			
		||||
					Wo_Mat_Qa_Services('ClearSignatureByStage', WOMatQaKey, 'MO_QA')
 | 
			
		||||
					obj_Appwindow('LoadFormKeys',@WINDOW:@RM:WMOutKey)
 | 
			
		||||
					
 | 
			
		||||
					RETURN
 | 
			
		||||
			End Case
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        // Cassette is on hold so makeup wafers cannot be added.
 | 
			
		||||
        ErrorMessage = 'Add MU Wafer Denied!. The cassette must be taken off hold before adding makeup wafers.'
 | 
			
		||||
@ -2281,57 +2290,49 @@ return
 | 
			
		||||
 | 
			
		||||
RefreshWaferCounterData:
 | 
			
		||||
        
 | 
			
		||||
    WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
    If WCCheckEnabled then
 | 
			
		||||
	Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
	QtyBackColor = GREEN$
 | 
			
		||||
	WONo         = Get_Property(@Window : '.WO_NO', 'TEXT')
 | 
			
		||||
	Cassette     = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
 | 
			
		||||
	WMOKey       = WONo:'*1*':Cassette
 | 
			
		||||
	If WMOKey NE '*1*' then
 | 
			
		||||
		FqaWcRec        = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
 | 
			
		||||
		WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
		Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
		WafersFilled    = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
 | 
			
		||||
		Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
		
 | 
			
		||||
        Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
 | 
			
		||||
        QtyBackColor = GREEN$
 | 
			
		||||
        WONo         = Get_Property(@Window : '.WO_NO', 'TEXT')
 | 
			
		||||
        Cassette     = Get_Property(@Window : '.OUT_CASS_NO', 'TEXT')
 | 
			
		||||
        WMOKey       = WONo:'*1*':Cassette
 | 
			
		||||
        If WMOKey NE '*1*' then
 | 
			
		||||
			FqaWcRec        = Wafer_Counter_Services('GetLastScan', WMOKey, 'QA')
 | 
			
		||||
			WaferCounterQty = FqaWcRec<WAFER_COUNTER.SCAN_QTY$>
 | 
			
		||||
			Set_Property(@Window, '@ORIG_WFR_CTR_QTY', WaferCounterQty)
 | 
			
		||||
			WafersFilled    = Get_Property(@WINDOW:'.WAFER_CNT','TEXT')
 | 
			
		||||
			Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP', WaferCounterQty)
 | 
			
		||||
			
 | 
			
		||||
			************************************
 | 
			
		||||
			* Wafer Counter - Quantity Section *
 | 
			
		||||
			************************************
 | 
			
		||||
			If (WaferCounterQty NE '') then
 | 
			
		||||
				If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
 | 
			
		||||
			end else
 | 
			
		||||
				QtyBackColor = ORANGE$
 | 
			
		||||
			end
 | 
			
		||||
			WaferSize   = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
 | 
			
		||||
			WaferSize   = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
			If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
				WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
				If Error_Services('NoError') then 
 | 
			
		||||
					WCCurrMode = ''
 | 
			
		||||
					If RowExists('TOOL', WCToolID) then
 | 
			
		||||
						WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
						WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
						Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
					end else
 | 
			
		||||
						ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
					end
 | 
			
		||||
		************************************
 | 
			
		||||
		* Wafer Counter - Quantity Section *
 | 
			
		||||
		************************************
 | 
			
		||||
		If (WaferCounterQty NE '') then
 | 
			
		||||
			If (WaferCounterQty NE WafersFilled) then QtyBackColor = RED$
 | 
			
		||||
		end else
 | 
			
		||||
			QtyBackColor = ORANGE$
 | 
			
		||||
		end
 | 
			
		||||
		WaferSize   = Xlate('WM_OUT', WMOKey, 'WAFER_SIZE', 'X')
 | 
			
		||||
		WaferSize   = Field(WaferSize, ' ', 3, 1)
 | 
			
		||||
		If ( (WaferSize EQ 6) or (WaferSize EQ 8) ) then
 | 
			
		||||
			WCToolId = Wafer_Counter_Services('GetWaferCounterToolID', WaferSize:'INCH', 'QA')
 | 
			
		||||
			If Error_Services('NoError') then 
 | 
			
		||||
				WCCurrMode = ''
 | 
			
		||||
				If RowExists('TOOL', WCToolID) then
 | 
			
		||||
					WCCurrModeKey = Xlate('TOOL', WCToolID, 'CURR_MODE_KEY', 'X')
 | 
			
		||||
					WCCurrMode    = Xlate('TOOL_LOG', WCCurrModeKey, 'TOOL_MODE', 'X')
 | 
			
		||||
					Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY', 'ENABLED', (WCCurrMode NE 'PROD'))
 | 
			
		||||
				end else
 | 
			
		||||
					ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
					ErrMsg('Verify wafer count error. Invalid wafer counter tool ID "':WCToolID:'".')
 | 
			
		||||
				end
 | 
			
		||||
			end else
 | 
			
		||||
				ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
 | 
			
		||||
				ErrMsg(Error_Services('GetMessage'))
 | 
			
		||||
			end
 | 
			
		||||
        end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrMsg('Verify wafer count error. Invalid wafer size "':WaferSize:'" returned for WMO "':WMOKey:'".')
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
        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    
 | 
			
		||||
	Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -881,24 +881,19 @@ Event SIGN_BUTTON.CLICK()
 | 
			
		||||
    ******************************************
 | 
			
		||||
    * Verify Unload Stage QA Metrology Tests *
 | 
			
		||||
    ******************************************
 | 
			
		||||
 | 
			
		||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
 | 
			
		||||
    If (DevelopmentFlag EQ True$) then
 | 
			
		||||
        WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
        WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
        OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
        OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
        If OutOfSpec GT 0 then
 | 
			
		||||
            FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
            ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
            For each FailReason in FailReasons using @VM
 | 
			
		||||
                ErrorMsg := FailReason:CRLF$
 | 
			
		||||
            Next FailReason
 | 
			
		||||
            ErrMsg(ErrorMsg)
 | 
			
		||||
            Return
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
	WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
	WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
	OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
	OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
	If OutOfSpec GT 0 then
 | 
			
		||||
		FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
		ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
		For each FailReason in FailReasons using @VM
 | 
			
		||||
			ErrorMsg := FailReason:CRLF$
 | 
			
		||||
		Next FailReason
 | 
			
		||||
		ErrMsg(ErrorMsg)
 | 
			
		||||
		Return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    *******************************************
 | 
			
		||||
    * Verify if all steps have been completed *
 | 
			
		||||
@ -1965,7 +1960,3 @@ ClearForm:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -440,7 +440,7 @@ END
 | 
			
		||||
IF CurrStatus NE '' THEN
 | 
			
		||||
	SWAP @VM WITH '" "' IN CurrStatus
 | 
			
		||||
	IF SelectSent NE '' THEN SelectSent := ' AND'
 | 
			
		||||
	SelectSent := ' WITH CURR_STATUS ':QUOTE(CurrStatus)
 | 
			
		||||
	SelectSent := ' WITH CURR_STATUS_STATIC ':QUOTE(CurrStatus)
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IF PartTypes NE '' THEN
 | 
			
		||||
@ -471,7 +471,7 @@ SelectSent = 'SELECT REACT_ITEM ':SelectSent
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Def = ""
 | 
			
		||||
Def<MTEXT$> = "Selecting Reactor Events..."
 | 
			
		||||
Def<MTEXT$> = "Selecting Reactor Items..."
 | 
			
		||||
Def<MTYPE$> = "U"
 | 
			
		||||
 | 
			
		||||
* display the processing message and do the processing
 | 
			
		||||
@ -502,6 +502,3 @@ End_Dialog(@WINDOW,RINos)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -259,7 +259,7 @@ end service
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service GetWaferMapProductionPath()
 | 
			
		||||
 | 
			
		||||
    ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData'
 | 
			
		||||
    ProductionPath = '\\mesfs.infineon.com\EC_Metrology_Si\MetrologyAttachments\TencorRunData_'
 | 
			
		||||
    Response       = ProductionPath
 | 
			
		||||
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ Declare subroutine  SRP_EditTable_Manager, SRP_Show_Window, Logging_Services, ob
 | 
			
		||||
Declare subroutine  Database_Services, End_Window, ShowWindow, SRP_Run_Command, Placedialog
 | 
			
		||||
Declare function    SRP_EditTable_Manager, Database_Services, Security_Services, Logging_Services, Environment_Services
 | 
			
		||||
Declare function    GetPrivateProfileString, WritePrivateProfileString, GetPrivateProfileSection, SRP_Get_FileVersion
 | 
			
		||||
Declare function    Datetime, Rti_Getnetworkusername
 | 
			
		||||
Declare function    Datetime
 | 
			
		||||
 | 
			
		||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\Version'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
@ -81,11 +81,6 @@ Return EventFlow else EVENT_CONTINUE$
 | 
			
		||||
 | 
			
		||||
Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
 | 
			
		||||
    // Stopgap solution to kill SRP App launcher splash screen if it fails to close.
 | 
			
		||||
    WindowsUser = Rti_Getnetworkusername()
 | 
			
		||||
    KillCommand = 'taskkill /f /fi "USERNAME EQ ' : WindowsUser : '" /im MES.exe'
 | 
			
		||||
    SRP_Run_Command(KillCommand, '', '', '')
 | 
			
		||||
 | 
			
		||||
    GoSub Setup_OLE_Controls
 | 
			
		||||
 | 
			
		||||
    Set_Property(@Window : '.PUB_CLOSE', 'NEXT', @Window : '.EDL_USERNAME')
 | 
			
		||||
@ -156,6 +151,7 @@ Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
    
 | 
			
		||||
    PlaceDialog(-2, -2)
 | 
			
		||||
    Set_Property(@Window, 'VISIBLE', 1)
 | 
			
		||||
    Set_Property(@Window:'.EDL_USERNAME', 'FOCUS', True$)
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
@ -265,4 +261,3 @@ Setup_OLE_Controls:
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,9 @@ Compile function Lot_Services(@Service, @Params)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
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 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 LOT_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 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
 | 
			
		||||
 | 
			
		||||
Return Response or ""
 | 
			
		||||
@ -113,6 +120,9 @@ Service GenerateNewLotId(LotType)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'GetLotIdByLegacyLotIdAndType'
 | 
			
		||||
	
 | 
			
		||||
	Open 'DICT.LOT' to DictLot then
 | 
			
		||||
        
 | 
			
		||||
        SearchString    = ''
 | 
			
		||||
@ -130,10 +140,16 @@ Service GetLotIdByLegacyLotIdAndType(LegacyLotId, LegacyLotType)
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMsg = 'Error in ':Service:' service. Error opening LOT dictionary.'
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, VendorCode, Username, PrinterID, LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'CreateNewLot'
 | 
			
		||||
	
 | 
			
		||||
    CreatedLotNumber = ''
 | 
			
		||||
    ErrorMessage     = ''
 | 
			
		||||
    Begin Case
 | 
			
		||||
@ -279,6 +295,8 @@ Service CreateNewLot(LotType, ProdName, LotQty, VendorPartNo, VendorLotNo, Vendo
 | 
			
		||||
    end
 | 
			
		||||
    Response = CreatedLotNumber
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -484,6 +502,9 @@ end service
 | 
			
		||||
 | 
			
		||||
//Returns a @FM delimited list of operations in sequence
 | 
			
		||||
Service GetLotOperationSequence(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetLotOperationSequence'
 | 
			
		||||
	
 | 
			
		||||
    LotOperationsInSequence = ''
 | 
			
		||||
    If LotID NE '' then
 | 
			
		||||
        //Get Operations
 | 
			
		||||
@ -496,9 +517,15 @@ Service GetLotOperationSequence(LotId)
 | 
			
		||||
        //error: lot id was null
 | 
			
		||||
    end
 | 
			
		||||
    Response = LotOperationsInSequence
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetLotCurrOperationId(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetLotCurrOperationId'
 | 
			
		||||
	
 | 
			
		||||
    CurrOperation = ''
 | 
			
		||||
    If LotID NE '' then
 | 
			
		||||
        //Get them in sequence first
 | 
			
		||||
@ -515,9 +542,15 @@ Service GetLotCurrOperationId(LotId)
 | 
			
		||||
        //error: lot id was null
 | 
			
		||||
    end
 | 
			
		||||
    Response = CurrOperation
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetLotCurrOperationName(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetLotCurrOperationName'
 | 
			
		||||
	
 | 
			
		||||
    CurrOperationId   = ''
 | 
			
		||||
    CurrOperationName = ''
 | 
			
		||||
    If LotID NE '' then
 | 
			
		||||
@ -536,6 +569,9 @@ Service GetLotCurrOperationName(LotId)
 | 
			
		||||
        //error: lot id was null
 | 
			
		||||
    end
 | 
			
		||||
    Response = CurrOperationName
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
 | 
			
		||||
@ -591,6 +627,9 @@ Service AddLotOperationIntoSequence(LotId, NewOperationId, NewSequence, Rework)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service IsLotMovedIn(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'IsLotMovedIn'
 | 
			
		||||
	
 | 
			
		||||
    Response = ''
 | 
			
		||||
    If RowExists('LOT', LotId) then
 | 
			
		||||
        CurrOperId    = Lot_Services('GetLotCurrOperationId', LotId)
 | 
			
		||||
@ -601,6 +640,9 @@ Service IsLotMovedIn(LotId)
 | 
			
		||||
            Response = False$
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service IsOperationCompleted(LotOperationId)
 | 
			
		||||
@ -619,6 +661,8 @@ Service IsOperationCompleted(LotOperationId)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service MoveInLot(LotID, Operator)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'MoveInLot'
 | 
			
		||||
 | 
			
		||||
    ErrorMessage           = ''
 | 
			
		||||
    ThisLotCurrOperationID = ''
 | 
			
		||||
@ -667,9 +711,15 @@ Service MoveInLot(LotID, Operator)
 | 
			
		||||
         Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
			
		||||
         Error_Services('Add', ErrorMessage)
 | 
			
		||||
     end
 | 
			
		||||
     
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service MoveOutLot(LotID, Operator)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'MoveOutLot'
 | 
			
		||||
	
 | 
			
		||||
	ErrorMessage           = ''
 | 
			
		||||
	ThisLotCurrOperationID = ''
 | 
			
		||||
	If LotId NE '' then
 | 
			
		||||
@ -729,6 +779,9 @@ Service MoveOutLot(LotID, Operator)
 | 
			
		||||
		Logging_Services('AppendLog', objLotMoveLog, LogData, @RM, @FM, False$)
 | 
			
		||||
		Error_Services('Add', ErrorMessage)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
 | 
			
		||||
@ -855,6 +908,9 @@ Service ConvertLotRecordToJson(LotId, ItemURL, CurrUser, FullObject=BOOLEAN)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service OpenLot(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'OpenLot'
 | 
			
		||||
	
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    If RowExists('LOT', LotId) then
 | 
			
		||||
        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
			
		||||
@ -871,9 +927,15 @@ Service OpenLot(LotId)
 | 
			
		||||
    If ErrorMessage NE ''  then
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CloseLot(LotId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CloseLot'
 | 
			
		||||
	
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    If RowExists('LOT', LotId) then
 | 
			
		||||
        LotRec            = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
			
		||||
@ -890,6 +952,9 @@ Service CloseLot(LotId)
 | 
			
		||||
    If ErrorMessage NE ''  then
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service AutoCloseTestWaferLot(LotId, CloseUserId)
 | 
			
		||||
@ -989,15 +1054,26 @@ Service AutoCloseTestWaferLot(LotId, CloseUserId)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service HoldLot(LotId, OperatorId)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'HoldLot'
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service UnholdLot(LotId, OperatorId)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'UnholdLot'
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'ReduceLotWaferCount'
 | 
			
		||||
	
 | 
			
		||||
	ErrorMessage = ''
 | 
			
		||||
	If RowExists('LOT', LotId) then
 | 
			
		||||
		LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
			
		||||
@ -1043,9 +1119,15 @@ Service ReduceLotWaferCount(LotId, ReductionQty, OperatorId)
 | 
			
		||||
	if ErrorMessage NE '' then
 | 
			
		||||
		Error_Services('Add', ErrorMessage)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'IncreaseLotWaferCount'
 | 
			
		||||
	
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    If RowExists('LOT', LotId) then
 | 
			
		||||
        LotRec        = Database_Services('ReadDataRow', 'LOT', LotId, True$, 0, False$)
 | 
			
		||||
@ -1087,6 +1169,8 @@ Service IncreaseLotWaferCount(LotId, IncreaseQty, OperatorId)
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service OpenOIWizardCreateTWLotInBrowser()
 | 
			
		||||
@ -1095,6 +1179,9 @@ Service OpenOIWizardCreateTWLotInBrowser()
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'CreateNewVoidedLotRecord'
 | 
			
		||||
	
 | 
			
		||||
	ErrorMessage = ''
 | 
			
		||||
	If RowExists('LSL_USERS', Username) then
 | 
			
		||||
		If LotType NE '' then
 | 
			
		||||
@ -1165,15 +1252,8 @@ Service CreateNewVoidedLotRecord(LotId, LegacyLotId, LotType=LOT_TYPES, Username
 | 
			
		||||
	If ErrorMessage NE ''  then
 | 
			
		||||
		//Todo Log Error Message
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -18,7 +18,7 @@ Parm3:
 | 
			
		||||
    -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
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
@ -44,17 +44,31 @@ Options STATES       = 'OK', 'WARNING', 'CRITICAL'
 | 
			
		||||
 | 
			
		||||
Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
 | 
			
		||||
	
 | 
			
		||||
	Mona_Services("SendBufferedStatus", MonitorName, StatusName, CurrentState)
 | 
			
		||||
	Mona_Services("PostStatus", MonitorName, StatusName, CurrentState)
 | 
			
		||||
	
 | 
			
		||||
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)
 | 
			
		||||
	
 | 
			
		||||
	Mona_Services("SendBufferedAverageMetric", MonitorName, MetricName, Number)
 | 
			
		||||
	Mona_Services("PostAverageMetric", MonitorName, MetricName, Number)
 | 
			
		||||
	
 | 
			
		||||
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)
 | 
			
		||||
	
 | 
			
		||||
@ -172,6 +186,67 @@ Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
 | 
			
		||||
	
 | 
			
		||||
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:
 | 
			
		||||
	
 | 
			
		||||
@ -195,3 +270,4 @@ SwapResourceNames:
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,38 @@
 | 
			
		||||
Compile function NDW_5S_EVENTS(CtrlEntId, Event, @PARAMS)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    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 Infineon.
 | 
			
		||||
 | 
			
		||||
    Name        :   NDW_5S_Events
 | 
			
		||||
 | 
			
		||||
    Description :   This function acts as a commuter module for all events related to this window.
 | 
			
		||||
 | 
			
		||||
    Notes       :   Commuter Modules are automatically called from the Promoted_Events function which is called by the
 | 
			
		||||
                    application-specific promoted event handler. This makes it possible to add QuickEvents that need to
 | 
			
		||||
                    execute Basic+ logic without having use the Form Designer to make the association, although this is
 | 
			
		||||
                    limited to the events which are currently promoted.
 | 
			
		||||
 | 
			
		||||
                    If the form needs to call the commuter module directly then the QuickEvent parameters should be
 | 
			
		||||
                    formatted like this:
 | 
			
		||||
 | 
			
		||||
                        '@SELF','@EVENT',['@PARAM1','@PARAMx']
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        CtrlEntId   [in] -- The fully qualified name of the control calling the promoted event
 | 
			
		||||
        Event       [in] -- The event being executed. See the Notes section regarding "PRE" events
 | 
			
		||||
        Param1-15   [in] -- Additional event parameter holders
 | 
			
		||||
        EventFlow  [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
 | 
			
		||||
                            EVENT_SETUP insert
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        05/14/2025    djs     Modified edit table properties to fit longer descriptions
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
#window NDW_5S
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$Insert EVENT_SETUP
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert PM_SPEC_EQUATES
 | 
			
		||||
$Insert PM_EQUATES
 | 
			
		||||
@ -21,7 +51,6 @@ EQU COL$SCHED_START TO 5
 | 
			
		||||
EQU COL$LATE_START  TO 6
 | 
			
		||||
EQU COL$ACTION      TO 7
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Form colors
 | 
			
		||||
EQU RED$FIVES    TO '5924072'
 | 
			
		||||
EQU GREEN$FIVES  TO '7596927'
 | 
			
		||||
@ -34,11 +63,11 @@ If Event EQ 'OLE' then
 | 
			
		||||
    Transfer Param1 to Event
 | 
			
		||||
    Transfer Param2 to Param1
 | 
			
		||||
    Transfer Param3 to Param2
 | 
			
		||||
    *    Transfer Param4 to Param3
 | 
			
		||||
    *    Transfer Param5 to Param4
 | 
			
		||||
    *    Transfer Param6 to Param5
 | 
			
		||||
    *    Transfer Param7 to Param6
 | 
			
		||||
    *    Transfer Param8 to Param7
 | 
			
		||||
    Transfer Param4 to Param3
 | 
			
		||||
    Transfer Param5 to Param4
 | 
			
		||||
    Transfer Param6 to Param5
 | 
			
		||||
    Transfer Param7 to Param6
 | 
			
		||||
    Transfer Param8 to Param7
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
GoToEvent Event for CtrlEntId else
 | 
			
		||||
@ -79,8 +108,11 @@ Event CHK_ARCHIVED.CLICK()
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event CMB_AREA.CHANGED(NewData)
 | 
			
		||||
	
 | 
			
		||||
    GoSub GetKeys
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -144,9 +176,9 @@ Event EDT_5S_TABLE.OnButtonClick(Cell, Point, Button, Shift, Ctrl)
 | 
			
		||||
                GoSub GetKeys
 | 
			
		||||
            end
 | 
			
		||||
        Case ColClicked EQ COL$PM_ID
 | 
			
		||||
                       
 | 
			
		||||
            Null       
 | 
			
		||||
        Case Otherwise$
 | 
			
		||||
            
 | 
			
		||||
            Null
 | 
			
		||||
    End Case
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
@ -169,20 +201,12 @@ Event EDT_5S_TABLE.OnDblClick(Cell, Point, Button, Shift, Ctrl)
 | 
			
		||||
            
 | 
			
		||||
            Start_Window('NDW_PM_HISTORY', @Window, PMSID)
 | 
			
		||||
        Case Otherwise$
 | 
			
		||||
            
 | 
			
		||||
            Null
 | 
			
		||||
    End Case
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event EDT_5S_TABLE.OnLostFocus()
 | 
			
		||||
    
 | 
			
		||||
    //Set_Property(@Window : '.EDT_SEL_ROW', 'TEXT', ''); *Clear out selected row.
 | 
			
		||||
    //Set_Property(@Window : '.PUB_VIEW_SELECTED', 'ENABLED', 0)
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event PUB_ADD_NEW_PM_SPEC.CLICK()
 | 
			
		||||
    
 | 
			
		||||
    Start_Window('PM_SPEC', @Window, '')
 | 
			
		||||
@ -217,11 +241,12 @@ end event
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
GetKeys:
 | 
			
		||||
	
 | 
			
		||||
    ShowArchived = Get_Property(@Window : '.CHK_ARCHIVED', 'CHECK')
 | 
			
		||||
    SelectedArea = Get_Property(@Window : '.CMB_AREA', 'TEXT')
 | 
			
		||||
    
 | 
			
		||||
    FiveSPMKeys  = Pm_Services('Get5SPMs', ShowArchived, SelectedArea) 
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
FormatData:
 | 
			
		||||
    
 | 
			
		||||
    TableData = ''
 | 
			
		||||
@ -250,17 +275,17 @@ FormatData:
 | 
			
		||||
        TableData<tPos, COL$LATE_START>  = LateStarts
 | 
			
		||||
    Next PMKey
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
PopulateTable:
 | 
			
		||||
    
 | 
			
		||||
    EdtTableCtrl = @Window : '.EDT_5S_TABLE'
 | 
			
		||||
    TableData    = SRP_Array("Rotate", TableData)
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.ARRAY", TableData)
 | 
			
		||||
    //Set last column in row to a PUB
 | 
			
		||||
    // Set last column in row to a PUB
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellType[7; ALL]", "Push Button")
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellText[7; ALL]", "Click To Complete")
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellImage[7; ALL]", 1)
 | 
			
		||||
    
 | 
			
		||||
    //Get All Cell Settings
 | 
			
		||||
    // Get All Cell Settings
 | 
			
		||||
    ColumnSettings      = Get_Property(EdtTableCtrl, "OLE.CellType[3; ALL]")
 | 
			
		||||
    ColumnSettings<2,3> = 0; *Turns off data from cell 7 of each row.
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellType[7; ALL]", ColumnSettings)
 | 
			
		||||
@ -268,7 +293,7 @@ PopulateTable:
 | 
			
		||||
    
 | 
			
		||||
ColorCodeRows:
 | 
			
		||||
        
 | 
			
		||||
    //Here we color code all the rows based on whether they're not due, due, or overdue.
 | 
			
		||||
    // Here we color code all the rows based on whether they're not due, due, or overdue.
 | 
			
		||||
    TableData      = Get_Property(EdtTableCtrl, "OLE.ARRAY")
 | 
			
		||||
    TableData      = SRP_Array('Rotate', TableData)
 | 
			
		||||
    CurrDTM        = SRP_Datetime('Now')
 | 
			
		||||
@ -318,7 +343,6 @@ SetupForm:
 | 
			
		||||
        Set_Property(@Window : '.PUB_ADD_NEW_PM_SPEC', 'VISIBLE', 0)
 | 
			
		||||
        Set_Property(@Window : '.PUB_VIEW_SELECTED', 'VISIBLE', 0)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    Set_Property(@Window : '.PUB_VIEW_SELECTED', 'ENABLED', 0)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
@ -327,51 +351,44 @@ return
 | 
			
		||||
Setup_OLE_Controls:
 | 
			
		||||
    
 | 
			
		||||
    EdtTableCtrl   = @Window : '.EDT_5S_TABLE'
 | 
			
		||||
    //Row Selection Settings
 | 
			
		||||
    // Row Selection Settings
 | 
			
		||||
    RowSelArray    = Get_Property(EdtTableCtrl, "OLE.SelectionStyle")
 | 
			
		||||
    RowSelArray<7> = 'Header'
 | 
			
		||||
    RowSelArray<8> = True$;*Always show row selection
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.SelectionStyle", RowSelArray)
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Redraw', False$)
 | 
			
		||||
    //Set up columns
 | 
			
		||||
    // Set up columns
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.Dimension", 7);*Define number of columns
 | 
			
		||||
    
 | 
			
		||||
    HeaderTitles = 'PM ID':@VM:'Desc':@VM:'Last PM':@VM:'Early Start':@VM:'Sched Start':@VM:'Late Start':@VM:'Action'; *Define the column header titles
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.TitleList", HeaderTitles); *Set the column titles
 | 
			
		||||
    
 | 
			
		||||
    //Set the column Sizes
 | 
			
		||||
    // Set the column Sizes
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.HeaderColumn[1]", '':@FM:False$)
 | 
			
		||||
    ColSize = Get_Property(EdtTableCtrl, "OLE.DataColumn[1]")
 | 
			
		||||
    
 | 
			
		||||
    //Column 1
 | 
			
		||||
    // Column 1
 | 
			
		||||
    ColSize<1> = 45
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PM_ID:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 2
 | 
			
		||||
    ColSize<1> = 160
 | 
			
		||||
    //ColSize<4> = True$
 | 
			
		||||
    // Column 2
 | 
			
		||||
    ColSize<1> = 200
 | 
			
		||||
    ColSize<4> = True$
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DESC:"]", ColSize)
 | 
			
		||||
    //Set_Property(Ctrl, "OLE.DataColumn[":COL$ELAP_HRS:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 3
 | 
			
		||||
    ColSize<4> = False$
 | 
			
		||||
    // Column 3
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LAST_PM:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 4
 | 
			
		||||
    // Column 4
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$EARLY_START:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 5
 | 
			
		||||
    // Column 5
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$SCHED_START:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 6
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LATE_START:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    //Column 7
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$ACTION:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Border', 'XP Flat')
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Font', 'Segoe UI' : @SVM : '15')
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellProtection[All; All]", 'RO')
 | 
			
		||||
@ -388,5 +405,3 @@ Setup_OLE_Controls:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										99
									
								
								LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								LSL2/STPROC/NDW_ACKNOWLEDGE_MESSAGE_EVENTS.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
Compile function NDW_ACKNOWLEDGE_MESSAGE_EVENTS(CtrlEntId, Event, @PARAMS)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    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 Infineon.
 | 
			
		||||
 | 
			
		||||
    Name        :   NDW_ACKNOWLEDGE_MESSAGE_EVENTS
 | 
			
		||||
 | 
			
		||||
    Description :   This function acts as a commuter module for all events related to this window.
 | 
			
		||||
 | 
			
		||||
    Notes       :   Commuter Modules are automatically called from the Promoted_Events function which is called by the
 | 
			
		||||
                    application-specific promoted event handler. This makes it possible to add QuickEvents that need to
 | 
			
		||||
                    execute Basic+ logic without having use the Form Designer to make the association, although this is
 | 
			
		||||
                    limited to the events which are currently promoted.
 | 
			
		||||
 | 
			
		||||
                    If the form needs to call the commuter module directly then the QuickEvent parameters should be
 | 
			
		||||
                    formatted like this:
 | 
			
		||||
 | 
			
		||||
                        '@SELF','@EVENT',['@PARAM1','@PARAMx']
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        CtrlEntId   [in] -- The fully qualified name of the control calling the promoted event
 | 
			
		||||
        Event       [in] -- The event being executed. See the Notes section regarding "PRE" events
 | 
			
		||||
        Param1-15   [in] -- Additional event parameter holders
 | 
			
		||||
        EventFlow  [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
 | 
			
		||||
                            EVENT_SETUP insert
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        05/23/25    djs     Created initial commuter module.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
#window NDW_ACKNOWLEDGE_MESSAGE
 | 
			
		||||
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert EVENT_SETUP
 | 
			
		||||
 | 
			
		||||
Declare subroutine PlaceDialog
 | 
			
		||||
 | 
			
		||||
SubclassInfo    = Form_Services('FindSubclassControl')
 | 
			
		||||
Subclass        = SubclassInfo<1>
 | 
			
		||||
 | 
			
		||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
 | 
			
		||||
If Event EQ 'OLE' then
 | 
			
		||||
    Transfer Event to OIEvent
 | 
			
		||||
    Transfer Param1 to Event
 | 
			
		||||
    Transfer Param2 to Param1
 | 
			
		||||
    Transfer Param3 to Param2
 | 
			
		||||
    Transfer Param4 to Param3
 | 
			
		||||
    Transfer Param5 to Param4
 | 
			
		||||
    Transfer Param6 to Param5
 | 
			
		||||
    Transfer Param7 to Param6
 | 
			
		||||
    Transfer Param8 to Param7
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
GoToEvent Event for CtrlEntId else
 | 
			
		||||
    // Event not implemented
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Return EventFlow or 1
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// EVENT HANDLERS
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
    
 | 
			
		||||
    TextToAcknowledge = CreateParam
 | 
			
		||||
    If TextToAcknowledge NE '' then
 | 
			
		||||
    	Swap @TM with CRLF$ in TextToAcknowledge
 | 
			
		||||
    	Set_Property(@Window:'.EDB_DATA', 'TEXT', TextToAcknowledge)
 | 
			
		||||
    	PlaceDialog(-2, -2)
 | 
			
		||||
    end else
 | 
			
		||||
    	Post_Event(@Window, 'CLOSE')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
End Event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event WINDOW.CLOSE(CancelFlag, CloseFlags)
 | 
			
		||||
	
 | 
			
		||||
	End_Dialog(@Window, False$)
 | 
			
		||||
	
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event PUB_OK.CLICK()
 | 
			
		||||
	
 | 
			
		||||
	End_Dialog(@Window, True$)
 | 
			
		||||
	
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event PUB_CANCEL.CLICK()
 | 
			
		||||
	
 | 
			
		||||
	End_Dialog(@Window, False$)
 | 
			
		||||
	
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ Compile function NDW_ADJUST_LOT_QTY_EVENTS(CtrlEntId, Event, @PARAMS)
 | 
			
		||||
#window NDW_ADJUST_LOT_QTY
 | 
			
		||||
 | 
			
		||||
Declare function MemberOf, Database_Services, Error_Services, Datetime
 | 
			
		||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services
 | 
			
		||||
Declare subroutine PlaceDialog, Database_Services, Lot_Services, Lot_Event_Services
 | 
			
		||||
$Insert App_Inserts
 | 
			
		||||
$Insert Lot_Equates
 | 
			
		||||
 | 
			
		||||
@ -126,9 +126,15 @@ Event PUB_SUBMIT.CLICK()
 | 
			
		||||
                            Case NewWfrQty LT CurrWfrQty
 | 
			
		||||
                                AmountToDecrease = CurrWfrQty - NewWfrQty
 | 
			
		||||
                                Lot_Services('ReduceLotWaferCount', LotId, AmountToDecrease, @User4)
 | 
			
		||||
                                If Error_Services('NoError') then
 | 
			
		||||
                                    Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty decrease performed.', '', @User4, '' , '')
 | 
			
		||||
                                end
 | 
			
		||||
                            Case NewWfrQty GT CurrWfrQty
 | 
			
		||||
                                AmountToIncrease = NewWfrQty - CurrWfrQty
 | 
			
		||||
                                Lot_Services('IncreaseLotWaferCount', LotId, AmountToIncrease, @User4)
 | 
			
		||||
                                If Error_Services('NoError') then
 | 
			
		||||
                                    Lot_Event_Services('CreateLotEvent', LotId, Datetime(), 'COMMENT', 'Manual Lot Qty increase performed.', '', @User4, '' , '')
 | 
			
		||||
                                end
 | 
			
		||||
                        End Case
 | 
			
		||||
                        If Error_Services('NoError') then
 | 
			
		||||
                            msg(@Window, 'Wafer quantity adjusted successfully!')
 | 
			
		||||
@ -176,3 +182,4 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -244,8 +244,10 @@ Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
        
 | 
			
		||||
        IF MemberOf(@USER4, 'SPEC_CHANGE') OR MemberOf(@USER4, 'OI_ADMIN') THEN
 | 
			
		||||
            Set_Property(@WINDOW:'.MENU.ENGINEERING.TOOL_CLASS_-_RECIPES__PATTERNS','VISIBLE',1)
 | 
			
		||||
            Set_Property(@WINDOW:'.MENU.ADM.TOOLS.PRS_STAGE_DEFAULTS','VISIBLE',1)
 | 
			
		||||
        END ELSE
 | 
			
		||||
            Set_Property(@WINDOW:'.MENU.ENGINEERING.TOOL_CLASS_-_RECIPES__PATTERNS','VISIBLE',0)
 | 
			
		||||
            Set_Property(@WINDOW:'.MENU.ADM.TOOLS.PRS_STAGE_DEFAULTS','VISIBLE',0)
 | 
			
		||||
        END
 | 
			
		||||
 | 
			
		||||
        Ctrls  = @WINDOW:'.MENU.ADMIN.FABTIME_SUPPORT':@RM      ; Props  = 'ENABLED':@RM
 | 
			
		||||
@ -850,3 +852,4 @@ FixFont:
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,41 @@
 | 
			
		||||
Compile function NDW_PM_HISTORY_EVENTS(CtrlEntId, Event, @PARAMS)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    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 Infineon.
 | 
			
		||||
 | 
			
		||||
    Name        :   NDW_PM_History_Events
 | 
			
		||||
 | 
			
		||||
    Description :   This function acts as a commuter module for all events related to this window.
 | 
			
		||||
 | 
			
		||||
    Notes       :   Commuter Modules are automatically called from the Promoted_Events function which is called by the
 | 
			
		||||
                    application-specific promoted event handler. This makes it possible to add QuickEvents that need to
 | 
			
		||||
                    execute Basic+ logic without having use the Form Designer to make the association, although this is
 | 
			
		||||
                    limited to the events which are currently promoted.
 | 
			
		||||
 | 
			
		||||
                    If the form needs to call the commuter module directly then the QuickEvent parameters should be
 | 
			
		||||
                    formatted like this:
 | 
			
		||||
 | 
			
		||||
                        '@SELF','@EVENT',['@PARAM1','@PARAMx']
 | 
			
		||||
 | 
			
		||||
    Parameters  :
 | 
			
		||||
        CtrlEntId   [in] -- The fully qualified name of the control calling the promoted event
 | 
			
		||||
        Event       [in] -- The event being executed. See the Notes section regarding "PRE" events
 | 
			
		||||
        Param1-15   [in] -- Additional event parameter holders
 | 
			
		||||
        EventFlow  [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
 | 
			
		||||
                            EVENT_SETUP insert
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        05/14/2025    djs     Modified edit table properties to fit longer descriptions
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
#window NDW_PM_HISTORY
 | 
			
		||||
 | 
			
		||||
Declare function Get_Property, Obj_Pm_Spec, Database_Services, SRP_Array, SRP_Datetime, Utility, OConv, Datetime
 | 
			
		||||
Declare subroutine Set_Property, Send_Message, Msg
 | 
			
		||||
Declare subroutine Set_Property, Send_Message, Msg, PlaceDialog
 | 
			
		||||
 | 
			
		||||
$Insert EVENT_SETUP
 | 
			
		||||
$Insert PM_EQUATES
 | 
			
		||||
$Insert PM_SPEC_EQUATES
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
@ -17,6 +48,19 @@ EQU COL$DATEDUE  to 4
 | 
			
		||||
EQU COL$LATE     to 5
 | 
			
		||||
EQU COL$USER     to 6
 | 
			
		||||
 | 
			
		||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
 | 
			
		||||
If Event EQ 'OLE' then
 | 
			
		||||
    Transfer Event to OIEvent
 | 
			
		||||
    Transfer Param1 to Event
 | 
			
		||||
    Transfer Param2 to Param1
 | 
			
		||||
    Transfer Param3 to Param2
 | 
			
		||||
    Transfer Param4 to Param3
 | 
			
		||||
    Transfer Param5 to Param4
 | 
			
		||||
    Transfer Param6 to Param5
 | 
			
		||||
    Transfer Param7 to Param6
 | 
			
		||||
    Transfer Param8 to Param7
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
GoToEvent Event for CtrlEntId else
 | 
			
		||||
    // Event not implemented
 | 
			
		||||
end
 | 
			
		||||
@ -35,12 +79,17 @@ Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
    IF PMSpecID NE '' then
 | 
			
		||||
        GoSub RunReport
 | 
			
		||||
    end
 | 
			
		||||
    PlaceDialog(-2, -2)
 | 
			
		||||
    
 | 
			
		||||
End Event
 | 
			
		||||
 | 
			
		||||
Event PUB_SEARCH.CLICK()
 | 
			
		||||
	
 | 
			
		||||
    GoSub RunReport
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event PUB_EXPORT_TO_EXCEL.CLICK()
 | 
			
		||||
    PmsId     = Get_Property(@Window : '.EDL_PM_SPEC', 'TEXT')
 | 
			
		||||
    If PmsId NE '' then
 | 
			
		||||
@ -81,8 +130,6 @@ Event PUB_EXPORT_TO_EXCEL.CLICK()
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
@ -96,41 +143,53 @@ RunReport:
 | 
			
		||||
    PMDescription  = XLATE('PM_SPEC', PMSpecId, PM_SPEC_DESC$, 'X')
 | 
			
		||||
    PMHistory      = obj_pm_spec('GetHistory', PMSpecId);*Returns list of PM Keys delimited by @VM
 | 
			
		||||
    PMHistoryArray = ''
 | 
			
		||||
    for each PMId in PMHistory using @VM setting pPos
 | 
			
		||||
	Def            = ""
 | 
			
		||||
	Def<MCAPTION$> = "Loading PM History..."
 | 
			
		||||
	Def<MTYPE$   > = "GC"
 | 
			
		||||
	Def<MEXTENT$ > = DCount(PMHistory, @VM)
 | 
			
		||||
	MsgUp          = Msg(@window, Def)
 | 
			
		||||
    For each PMId in PMHistory using @VM setting pPos
 | 
			
		||||
        PMRec                              = Database_Services('ReadDataRow', 'PM', PMId)
 | 
			
		||||
        SchedDtm                           = SRP_Datetime('Combine', PMRec<PM_SCHED_DT$>, PMRec<PM_SCHED_TM$>)
 | 
			
		||||
        DueByDTM                           = obj_PM_Spec('LateStart',PMId:@RM:PMSpecRecord)
 | 
			
		||||
        Late                               = Xlate('PM', PMId, 'LATE', 'X')
 | 
			
		||||
        If Late then Late = 'Yes' else Late = 'No'
 | 
			
		||||
        
 | 
			
		||||
        PMHistoryArray<pPos, COL$PMID>     = PMId
 | 
			
		||||
        PMHistoryArray<pPos, COL$DESC>     = PMDescription
 | 
			
		||||
        PMHistoryArray<pPos, COL$DATECOMP> = OCONV(PMRec<PM_COMP_DTM$>, 'DT')
 | 
			
		||||
        PMHistoryArray<pPos, COL$DATEDUE>  = OCONV(SchedDtm, 'DT')
 | 
			
		||||
        PMHistoryArray<pPos, COL$LATE>     = Late
 | 
			
		||||
        PMHistoryArray<pPos, COL$USER>     = PMRec<PM_COMP_BY$>
 | 
			
		||||
        PMHistoryArray<pPos, COL$USER>     = OConv(PMRec<PM_COMP_BY$>, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
 | 
			
		||||
	While Msg(@window, MsgUp, pPos, MSGINSTUPDATE$) ; * update the gauge and check if cancel was pressed
 | 
			
		||||
    Next PMId
 | 
			
		||||
    Msg(@window, MsgUp)         ;* take down the gauge
 | 
			
		||||
    PMHistoryArray = SRP_Array('Rotate',PMHistoryArray)
 | 
			
		||||
    PMHistoryArray = SRP_Array('SortRows', PMHistoryArray, 'D1', 'ARRAY', '', '')
 | 
			
		||||
    Set_Property(@Window : '.OLE_HIST_TABLE', "OLE.ARRAY", PMHistoryArray)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ColorCode:
 | 
			
		||||
	
 | 
			
		||||
    PMHistoryArray = Get_Property(@Window : '.OLE_HIST_TABLE', "OLE.ARRAY")
 | 
			
		||||
    PMHistoryArray = SRP_Array('Rotate',PMHistoryArray)
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SETUP_CONTROLS:
 | 
			
		||||
	
 | 
			
		||||
    Set_Property(@Window : '.EDL_PM_SPEC', 'TEXT', PMSpecID)
 | 
			
		||||
    GoSub Setup_OLE_Controls
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Setup_OLE_Controls:
 | 
			
		||||
	
 | 
			
		||||
    EdtTableCtrl = @Window : '.OLE_HIST_TABLE'
 | 
			
		||||
        Set_Property(EdtTableCtrl, 'OLE.Redraw', False$)
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Redraw', False$)
 | 
			
		||||
    //Set up columns
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.Dimension", 6);*Define number of columns
 | 
			
		||||
    
 | 
			
		||||
@ -138,39 +197,32 @@ Setup_OLE_Controls:
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.TitleList", HeaderTitles); *Set the column titles
 | 
			
		||||
    
 | 
			
		||||
    //Set the column Sizes
 | 
			
		||||
    ColSize = Get_Property(EdtTableCtrl, "OLE.DataColumn[1]")
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.HeaderColumn[1]", '':@FM:False$)
 | 
			
		||||
    ColSize    = Get_Property(EdtTableCtrl, "OLE.DataColumn[1]")
 | 
			
		||||
    //Column 1
 | 
			
		||||
    ColSize<1> = 45
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PMID:"]", ColSize)
 | 
			
		||||
    //Column 2
 | 
			
		||||
    ColSize<1> = 45
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$PMID:"]", ColSize)
 | 
			
		||||
    ColSize<1> = 200
 | 
			
		||||
    ColSize<4> = True$
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DESC:"]", ColSize)
 | 
			
		||||
    ColSize<4> = False$
 | 
			
		||||
    //Column 3
 | 
			
		||||
    ColSize<1> = 160
 | 
			
		||||
    ColSize<1> = 120
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATECOMP:"]", ColSize)
 | 
			
		||||
    //Column 4
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$DATEDUE:"]", ColSize)
 | 
			
		||||
    //Column 5
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    ColSize<1> = 50
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$LATE:"]", ColSize)
 | 
			
		||||
    //Column 6
 | 
			
		||||
    ColSize<1> = 110
 | 
			
		||||
    ColSize<1> = 160
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.DataColumn[":COL$USER:"]", ColSize)
 | 
			
		||||
    
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Border', 'XP Flat')
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Font', 'Segoe UI' : @SVM : '15')
 | 
			
		||||
    Set_Property(EdtTableCtrl, "OLE.CellProtection[All; All]", 'RO')
 | 
			
		||||
    
 | 
			
		||||
    // Set rows to resizeable and to expand when selected.
 | 
			
		||||
    //DataRow    = Get_Property(EdtTableCtrl, "OLE.DataRow[1]")
 | 
			
		||||
    //DataRow<3> = True$
 | 
			
		||||
    //DataRow<4> = False$
 | 
			
		||||
    //DataRow<5> = 160
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    //Set_Property(EdtTableCtrl, "OLE.DataRow[All]", DataRow)
 | 
			
		||||
    
 | 
			
		||||
    Set_Property(EdtTableCtrl, 'OLE.Redraw', True$)
 | 
			
		||||
    
 | 
			
		||||
    // Qualify OLE events that we want to intercept
 | 
			
		||||
@ -179,6 +231,6 @@ Setup_OLE_Controls:
 | 
			
		||||
    Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
 | 
			
		||||
    Send_Message(EdtTableCtrl,  'QUALIFY_EVENT', 'OLE.OnButtonClick', Qualifier)
 | 
			
		||||
    Send_Message(EdtTableCtrl,  'QUALIFY_EVENT', 'OLE.OnDblClick', Qualifier)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,25 +3,27 @@ Compile function NDW_WAFER_COUNTS_EVENTS(CtrlEntId, Event, @PARAMS)
 | 
			
		||||
#window NDW_WAFER_COUNTS
 | 
			
		||||
Declare function   Reactor_Services, Database_Services, Get_Property, Error_Services, Environment_Services
 | 
			
		||||
Declare function   SRP_Array, Logging_Services
 | 
			
		||||
Declare subroutine Set_Property, Logging_Services
 | 
			
		||||
Declare subroutine Set_Property, Logging_Services, PlaceDialog
 | 
			
		||||
 | 
			
		||||
$Insert EVENT_SETUP
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert REACTOR_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU DATA_ASM_REACT_ID$ to 1
 | 
			
		||||
EQU DATA_ASM_SUSC_CNT$ to 2
 | 
			
		||||
EQU DATA_ASM_SUSC_THK$ to 3
 | 
			
		||||
EQU DATA_ASM_TUBE_CNT$ to 4
 | 
			
		||||
EQU DATA_ASM_TUBE_THK$ to 5
 | 
			
		||||
EQU DATA_ASM_ARM_CNT$  to 6
 | 
			
		||||
EQU DATA_ASM_REACT_ID$    to 1
 | 
			
		||||
EQU DATA_ASM_SUSC_CNT$    to 2
 | 
			
		||||
EQU DATA_ASM_SUSC_THK$    to 3
 | 
			
		||||
EQU DATA_ASM_TUBE_CNT$    to 4
 | 
			
		||||
EQU DATA_ASM_TUBE_THK$    to 5
 | 
			
		||||
EQU DATA_ASM_ARM_CNT$     to 6
 | 
			
		||||
EQU DATA_ASM_EXHAUST_THK$ to 7
 | 
			
		||||
 | 
			
		||||
EQU DATA_HTR_REACT_ID$ to 1
 | 
			
		||||
EQU DATA_HTR_SUSC_CNT$ TO 2
 | 
			
		||||
EQU DATA_HTR_SUSC_THK$ TO 3
 | 
			
		||||
EQU DATA_HTR_TUBE_CNT$ TO 4
 | 
			
		||||
EQU DATA_HTR_TUBE_THK$ TO 5
 | 
			
		||||
EQU DATA_HTR_ARM_CNT$  TO 6
 | 
			
		||||
EQU DATA_HTR_REACT_ID$    to 1
 | 
			
		||||
EQU DATA_HTR_SUSC_CNT$    TO 2
 | 
			
		||||
EQU DATA_HTR_SUSC_THK$    TO 3
 | 
			
		||||
EQU DATA_HTR_TUBE_CNT$    TO 4
 | 
			
		||||
EQU DATA_HTR_TUBE_THK$    TO 5
 | 
			
		||||
EQU DATA_HTR_ARM_CNT$     TO 6
 | 
			
		||||
EQU DATA_HTR_EXHAUST_THK$ TO 7
 | 
			
		||||
 | 
			
		||||
EQU DATA_EPP_REACT_ID$         to 1
 | 
			
		||||
EQU DATA_EPP_SUSC_CNT$         TO 2
 | 
			
		||||
@ -30,6 +32,7 @@ EQU DATA_EPP_BELL_JAR_CNT$     TO 4
 | 
			
		||||
EQU DATA_EPP_BELL_JAR_THK$     TO 5
 | 
			
		||||
EQU DATA_EPP_LOWER_QUARTZ_CNT$ TO 6
 | 
			
		||||
EQU DATA_EPP_LOWER_QUARTZ_THK$ TO 7
 | 
			
		||||
EQU DATA_EPP_EXHAUST_THK$      TO 8
 | 
			
		||||
 | 
			
		||||
ASMDataTable = @Window : '.OLE_DATA_ASM'
 | 
			
		||||
HTRDataTable = @Window : '.OLE_DATA_HTR'
 | 
			
		||||
@ -49,11 +52,11 @@ If Event EQ 'OLE' then
 | 
			
		||||
    Transfer Param1 to Event
 | 
			
		||||
    Transfer Param2 to Param1
 | 
			
		||||
    Transfer Param3 to Param2
 | 
			
		||||
*    Transfer Param4 to Param3
 | 
			
		||||
*    Transfer Param5 to Param4
 | 
			
		||||
*    Transfer Param6 to Param5
 | 
			
		||||
*    Transfer Param7 to Param6
 | 
			
		||||
*    Transfer Param8 to Param7
 | 
			
		||||
    Transfer Param4 to Param3
 | 
			
		||||
    Transfer Param5 to Param4
 | 
			
		||||
    Transfer Param6 to Param5
 | 
			
		||||
    Transfer Param7 to Param6
 | 
			
		||||
    Transfer Param8 to Param7
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
GoToEvent Event for CtrlEntId else
 | 
			
		||||
@ -67,17 +70,25 @@ Return EventFlow or 1
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Event WINDOW.CREATE(CreateParam)
 | 
			
		||||
 | 
			
		||||
    GoSub SetupOLEControls
 | 
			
		||||
    GoSub GetReactorMetrics
 | 
			
		||||
    
 | 
			
		||||
End Event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event TABCONTROL_1.CLICK()
 | 
			
		||||
	
 | 
			
		||||
    Page = Get_Property(@Window : '.TABCONTROL_1', 'VALUE')
 | 
			
		||||
    Set_Property(@WINDOW,'VPOSITION', Page)
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Event PUB_REFRESH_DATA.CLICK()
 | 
			
		||||
	
 | 
			
		||||
    GoSub GetReactorMetrics
 | 
			
		||||
    
 | 
			
		||||
end event
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
@ -85,6 +96,7 @@ end event
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
GetReactorMetrics:
 | 
			
		||||
	
 | 
			
		||||
    ReactorRec = ''
 | 
			
		||||
    ASMData    = ''
 | 
			
		||||
    HTRData    = ''
 | 
			
		||||
@ -105,12 +117,13 @@ GetReactorMetrics:
 | 
			
		||||
    for each Reactor in ASMList using @FM setting rPos
 | 
			
		||||
        MetricData                        = Reactor_Services('GetWaferCntMetricsByReactorID', Reactor)
 | 
			
		||||
        if Error_Services('NoError') then
 | 
			
		||||
            ASMData<rPos, DATA_ASM_REACT_ID$> = MetricData<1, DATA_ASM_REACT_ID$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_SUSC_CNT$> = MetricData<1, DATA_ASM_SUSC_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_SUSC_THK$> = MetricData<1, DATA_ASM_SUSC_THK$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_TUBE_CNT$> = MetricData<1, DATA_ASM_TUBE_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_TUBE_THK$> = MetricData<1, DATA_ASM_TUBE_THK$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_ARM_CNT$>  = MetricData<1, DATA_ASM_ARM_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_REACT_ID$>    = MetricData<1, DATA_ASM_REACT_ID$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_SUSC_CNT$>    = MetricData<1, DATA_ASM_SUSC_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_SUSC_THK$>    = MetricData<1, DATA_ASM_SUSC_THK$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_TUBE_CNT$>    = MetricData<1, DATA_ASM_TUBE_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_TUBE_THK$>    = MetricData<1, DATA_ASM_TUBE_THK$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_ARM_CNT$>     = MetricData<1, DATA_ASM_ARM_CNT$>
 | 
			
		||||
            ASMData<rPos, DATA_ASM_EXHAUST_THK$> = MetricData<1, DATA_ASM_EXHAUST_THK$>
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
            LogData      = LoggingDTM : @FM : ErrorMessage
 | 
			
		||||
@ -123,12 +136,13 @@ GetReactorMetrics:
 | 
			
		||||
    for each Reactor in HTRList using @FM setting rPos
 | 
			
		||||
        MetricData                        = Reactor_Services('GetWaferCntMetricsByReactorID', Reactor)
 | 
			
		||||
        if Error_Services('NoError') then
 | 
			
		||||
            HTRData<rPos, DATA_HTR_REACT_ID$> = MetricData <1, DATA_HTR_REACT_ID$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_SUSC_CNT$> = MetricData<1, DATA_HTR_SUSC_CNT$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_SUSC_THK$> = MetricData<1, DATA_HTR_SUSC_THK$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_TUBE_CNT$> = MetricData<1, DATA_HTR_TUBE_CNT$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_TUBE_THK$> = MetricData<1, DATA_HTR_TUBE_THK$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_ARM_CNT$>  = MetricData<1, DATA_HTR_ARM_CNT$> 
 | 
			
		||||
            HTRData<rPos, DATA_HTR_REACT_ID$>    = MetricData <1, DATA_HTR_REACT_ID$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_SUSC_CNT$>    = MetricData<1, DATA_HTR_SUSC_CNT$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_SUSC_THK$>    = MetricData<1, DATA_HTR_SUSC_THK$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_TUBE_CNT$>    = MetricData<1, DATA_HTR_TUBE_CNT$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_TUBE_THK$>    = MetricData<1, DATA_HTR_TUBE_THK$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_ARM_CNT$>     = MetricData<1, DATA_HTR_ARM_CNT$>
 | 
			
		||||
            HTRData<rPos, DATA_HTR_EXHAUST_THK$> = MetricData<1, DATA_HTR_EXHAUST_THK$>
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
            LogData      = LoggingDTM : @FM : ErrorMessage
 | 
			
		||||
@ -149,6 +163,7 @@ GetReactorMetrics:
 | 
			
		||||
            EPPData<rPos, DATA_EPP_BELL_JAR_THK$>     = MetricData<1, DATA_EPP_BELL_JAR_THK$>
 | 
			
		||||
            EPPData<rPos, DATA_EPP_LOWER_QUARTZ_CNT$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_CNT$>
 | 
			
		||||
            EPPData<rPos, DATA_EPP_LOWER_QUARTZ_THK$> = MetricData<1, DATA_EPP_LOWER_QUARTZ_THK$>
 | 
			
		||||
            EPPData<rPos, DATA_EPP_EXHAUST_THK$>      = MetricData<1, DATA_EPP_EXHAUST_THK$>
 | 
			
		||||
        end else
 | 
			
		||||
            ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
            LogData      = LoggingDTM : @FM : ErrorMessage
 | 
			
		||||
@ -159,36 +174,55 @@ GetReactorMetrics:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SetupOLEControls:
 | 
			
		||||
    
 | 
			
		||||
    //Set Row Headers to invisible
 | 
			
		||||
    // Set Row Headers to invisible
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.HeaderColumn[1]", '':@FM:False$)
 | 
			
		||||
    
 | 
			
		||||
    //Set Number of columns for each table
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.Dimension", 6);*6 columns for ASM Data Table
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.Dimension", 6);*6 columns for HTR Data Table
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.Dimension", 7);*7 columns for EPP Data Table
 | 
			
		||||
    // Set Number of columns for each table
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.Dimension", 7);*6 columns for ASM Data Table
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.Dimension", 7);*6 columns for HTR Data Table
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.Dimension", 8);*7 columns for EPP Data Table
 | 
			
		||||
    
 | 
			
		||||
    //Set size of columns
 | 
			
		||||
    // Set size of all columns
 | 
			
		||||
    ColSizeArray    = ''
 | 
			
		||||
    ColSizeArray<1> = 100
 | 
			
		||||
    ColSizeArray<1> = 115
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.DataColumn[All]", ColSizeArray)
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.DataColumn[All]", ColSizeArray)
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.DataColumn[All]", ColSizeArray)
 | 
			
		||||
    
 | 
			
		||||
    // Shrink size of column 1
 | 
			
		||||
    ColSizeArray<1> = 60
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.DataColumn[1]", ColSizeArray)
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.DataColumn[1]", ColSizeArray)
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.DataColumn[1]", ColSizeArray)
 | 
			
		||||
    
 | 
			
		||||
    // Set size of all columns
 | 
			
		||||
    ColSizeArray    = ''
 | 
			
		||||
    ColSizeArray<1> = 125
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.DataColumn[6]", ColSizeArray)
 | 
			
		||||
    
 | 
			
		||||
    // Set autosize last column to true to fill out table width
 | 
			
		||||
    ColSizeArray<1> = 125
 | 
			
		||||
    ColSizeArray<4> = True$
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.DataColumn[7]", ColSizeArray)
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.DataColumn[7]", ColSizeArray)
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.DataColumn[8]", ColSizeArray)    
 | 
			
		||||
    
 | 
			
		||||
    //Set ASM Table Col. Headers
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Wfr. Cnt.':@VM:'Susc. Thk':@VM:'Tube Wfr. Cnt.':@VM:'Tube Wfr. Thk':@VM:'Arm Wfr. Cnt.'
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Wfr. Cnt.':@VM:'Susc. Thk':@VM:'Tube Wfr. Cnt.':@VM:'Tube Wfr. Thk':@VM:'Arm Wfr. Cnt.':@VM:'Exhaust Chamber Thk.'
 | 
			
		||||
    Set_Property(ASMDataTable, "OLE.TitleList", HeaderTitles)
 | 
			
		||||
    
 | 
			
		||||
    //Set HTR Table Col. Headers
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Tube Run Cnt.':@VM:'Tube Thk':@VM:'Arm Wfr. Cnt.'
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Tube Run Cnt.':@VM:'Tube Thk':@VM:'Arm Wfr. Cnt.':@VM:'Exhaust Chamber Thk.'
 | 
			
		||||
    Set_Property(HTRDataTable, "OLE.TitleList", HeaderTitles)
 | 
			
		||||
    
 | 
			
		||||
    //Set EPP Table Col. Headers
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Bell Jar Run Cnt.':@VM:'Bell Jar Thk':@VM:'Lower Quartz Run Cnt.':@VM:'Lower Quartz thk.'
 | 
			
		||||
    HeaderTitles = 'Reactor#':@VM:'Susc. Run Cnt.':@VM:'Susc. Thk':@VM:'Bell Jar Run Cnt.':@VM:'Bell Jar Thk':@VM:'Lower Quartz Run Cnt.':@VM:'Lower Quartz thk.':@VM:'Exhaust Chamber Thk.'
 | 
			
		||||
    Set_Property(EPPDataTable, "OLE.TitleList", HeaderTitles)
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -50,11 +50,13 @@ Return Response or ""
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Service Parameter Options
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
Options BOOLEAN        = True$, False$
 | 
			
		||||
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_STATUSES = 'new','creating','not-started','in-progress','cancelled','done'
 | 
			
		||||
Options REACTOR_TYPES  = 'ASM','ASM+','HTR','EPP'
 | 
			
		||||
Options BOOLEAN                  = True$, False$
 | 
			
		||||
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_STATUSES           = 'new','in-edit','creating','not-started','in-progress','cancelled','done'
 | 
			
		||||
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
 | 
			
		||||
@ -85,6 +87,7 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
 | 
			
		||||
				For each Val in IsComplete using @VM
 | 
			
		||||
					Query := @VM : Val
 | 
			
		||||
				Next Val
 | 
			
		||||
				Query := @FM
 | 
			
		||||
			end
 | 
			
		||||
			Btree.Extract(Query, Table, hDict, OrderKeys, Option, Flag)
 | 
			
		||||
			If Flag NE 0 then
 | 
			
		||||
@ -106,6 +109,64 @@ Service GetOrderIds(EntityType=ENTITY_TYPES, EntityID, OrderTypes=ORDER_TYPES, O
 | 
			
		||||
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()
 | 
			
		||||
 | 
			
		||||
	hSysLists   = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
@ -194,7 +255,9 @@ Service GetActiveOrders(EntityType=ENTITY_TYPES, EntityId, OrderTypes=ORDER_TYPE
 | 
			
		||||
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     = ''
 | 
			
		||||
	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
 | 
			
		||||
			Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)			
 | 
			
		||||
			
 | 
			
		||||
			CurrActiveOrders       = Nica_Orders_Services('GetActiveOrders', EntityType, EntityID, OrderType) 
 | 
			
		||||
			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)
 | 
			
		||||
			        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 '')
 | 
			
		||||
			
 | 
			
		||||
			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
 | 
			
		||||
							
 | 
			
		||||
							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')
 | 
			
		||||
							ChecklistArray         = NewChecklistIds:@FM:NewChecklistPriorities
 | 
			
		||||
							ChecklistArray         = SRP_Array('SortRows', ChecklistArray, 'AR2', 'ARRAY', @FM, @VM)
 | 
			
		||||
@ -369,6 +475,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
 | 
			
		||||
									end
 | 
			
		||||
									NicaOrderRec<NICA_ORDERS.ORDER_FLOW_IDS$>       = OrderFlows
 | 
			
		||||
									NicaOrderRec<NICA_ORDERS.ORDER_RESPONSE_LEVEL$> = OrderResponseLevel
 | 
			
		||||
									NicaOrderRec<NICA_ORDERS.INTRUSIVE$>            = Intrusive
 | 
			
		||||
									LogNicaOrderRec                                 = NicaOrderRec
 | 
			
		||||
									Swap @FM with ',' in LogNicaOrderRec
 | 
			
		||||
									LogData                                         = ''
 | 
			
		||||
@ -535,9 +642,9 @@ Service CancelOrder(OrderId)
 | 
			
		||||
						If HttpResponseJson NE '' then
 | 
			
		||||
							ObjResponseJson = ''
 | 
			
		||||
							If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
 | 
			
		||||
								IsComplete                              = SRP_JSON(ObjResponseJson, 'GetValue', 'pendingUpdate')
 | 
			
		||||
								NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = SRP_JSON(ObjResponseJson, 'GetValue', 'state')
 | 
			
		||||
								NicaOrderRec<NICA_ORDERS.IS_COMPLETE$>  = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
 | 
			
		||||
								IsComplete                              = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
 | 
			
		||||
								NicaOrderRec<NICA_ORDERS.ORDER_STATUS$> = 'cancelled'
 | 
			
		||||
								NicaOrderRec<NICA_ORDERS.IS_COMPLETE$>  = IsComplete
 | 
			
		||||
								CloseDtm                                = Datetime()
 | 
			
		||||
								NicaOrderRec<NICA_ORDERS.CLOSED_DTM$>   = CloseDtm								
 | 
			
		||||
								If IsComplete EQ False$ then
 | 
			
		||||
@ -900,8 +1007,120 @@ Service GetAvailableFlowIds(NicaOrderType=ORDER_TYPES)
 | 
			
		||||
	
 | 
			
		||||
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
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 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 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$)
 | 
			
		||||
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"'
 | 
			
		||||
ErrorMsg = ''
 | 
			
		||||
 | 
			
		||||
@ -116,6 +123,9 @@ RETURN
 | 
			
		||||
Post:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'Post'
 | 
			
		||||
	
 | 
			
		||||
    hSysLists       = Database_Services('GetTableHandle', 'SYSLISTS')
 | 
			
		||||
    ServiceKeyID    = 'Obj_Post_Log*Post'
 | 
			
		||||
    Lock hSysLists, ServiceKeyID then
 | 
			
		||||
@ -229,5 +239,9 @@ Post:
 | 
			
		||||
        Unlock hSysLists, ServiceKeyID else Null
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,8 +18,8 @@ COMPILE FUNCTION obj_Reactor(Method,Parms)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg
 | 
			
		||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables
 | 
			
		||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Mona_Services
 | 
			
		||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Environment_Services, GetTickCount
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$INSERT REACTOR_EQUATES
 | 
			
		||||
@ -28,6 +28,14 @@ $INSERT REACT_STATE_EQUATES
 | 
			
		||||
$INSERT REACT_ITEM_EQUATES
 | 
			
		||||
$INSERT MSG_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"'
 | 
			
		||||
ErrorMsg = ''
 | 
			
		||||
@ -66,6 +74,9 @@ RETURN Result
 | 
			
		||||
CurrItem:
 | 
			
		||||
* * * * * * * 
 | 
			
		||||
 | 
			
		||||
StartTick = GetTickCount()
 | 
			
		||||
MetricName = 'CurrItem'
 | 
			
		||||
 | 
			
		||||
ReactNo 	= Parms[1,@RM]
 | 
			
		||||
ItemType	= 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)
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
EndTick = GetTickCount()
 | 
			
		||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -103,6 +117,9 @@ RETURN
 | 
			
		||||
CurrGraphite:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
StartTick = GetTickCount()
 | 
			
		||||
MetricName = 'CurrGraphite'
 | 
			
		||||
 | 
			
		||||
ReactNo	= Parms[1,@RM]
 | 
			
		||||
ReactRec	= Parms[COL2()+1,@RM]
 | 
			
		||||
 | 
			
		||||
@ -135,6 +152,9 @@ FOR I = 1 TO ciCnt
 | 
			
		||||
	END
 | 
			
		||||
NEXT I
 | 
			
		||||
 | 
			
		||||
EndTick = GetTickCount()
 | 
			
		||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@ COMPILE FUNCTION obj_Reactor_Log(Method,Parms)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, obj_React_Item_Hist, Update_Index, obj_Post_Log
 | 
			
		||||
Declare subroutine Error_Services, Database_Services
 | 
			
		||||
Declare subroutine Error_Services, Database_Services, React_Item_Services
 | 
			
		||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, obj_React_Item, obj_Calendar, Database_Services
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -195,18 +195,16 @@ PostReactItems:
 | 
			
		||||
		ReactorLogRec<REACTOR_LOG_RI_POST_DTM$>	= PostDTM
 | 
			
		||||
		
 | 
			
		||||
		otParms = FIELDSTORE(otParms,@RM,4,0,ReactorLogRec)
 | 
			
		||||
		//obj_Tables('WriteRec',otParms)
 | 
			
		||||
 | 
			
		||||
		Database_Services('WriteDataRow', 'REACTOR_LOG', RLNo, ReactorLogRec, 1, 0, 1)
 | 
			
		||||
 | 
			
		||||
		Update_Index('REACT_ITEM_HIST', 'INST_RL_ID', False$, True$)		;* Don't wait for indexer - flush pending indexes now
 | 
			
		||||
		Update_Index('REACT_ITEM_HIST', 'REM_RL_ID', False$, True$)
 | 
			
		||||
 | 
			
		||||
	end else
 | 
			
		||||
		Error_Services('Add', ValidationFailureReason)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -386,10 +384,3 @@ RemHistKeys:
 | 
			
		||||
	
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,11 +18,12 @@ COMPILE FUNCTION obj_React_Item_Hist(Method,Parms)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
 | 
			
		||||
DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn
 | 
			
		||||
DECLARE SUBROUTINE ErrMsg, Btree.Extract
 | 
			
		||||
DECLARE FUNCTION   Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_Popup
 | 
			
		||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, ErrMsg, Btree.Extract, React_Item_Services
 | 
			
		||||
 | 
			
		||||
$Insert LOGICAL
 | 
			
		||||
$INSERT REACT_ITEM_HIST_EQUATES
 | 
			
		||||
$INSERT RLIST_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU CRLF$	TO \0D0A\
 | 
			
		||||
EQU TAB$	TO CHAR(9)
 | 
			
		||||
@ -62,26 +63,26 @@ RETURN Result
 | 
			
		||||
Install:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
RIHKey		= Parms[1,@RM]
 | 
			
		||||
RL_Id		= Parms[COL2()+1,@RM]
 | 
			
		||||
ReactWfrCnt	= Parms[COL2()+1,@RM]
 | 
			
		||||
ReactHrs	= Parms[COL2()+1,@RM]
 | 
			
		||||
    RIHKey		= Parms[1,@RM]
 | 
			
		||||
    RL_Id		= Parms[COL2()+1,@RM]
 | 
			
		||||
    ReactWfrCnt	= Parms[COL2()+1,@RM]
 | 
			
		||||
    ReactHrs	= Parms[COL2()+1,@RM]
 | 
			
		||||
 | 
			
		||||
IF RIHKey = ''			THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
 | 
			
		||||
IF RL_Id = ''			THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
 | 
			
		||||
*IF ReactWfrCnt = ''	THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')'	;* Optional
 | 
			
		||||
*IF ReactHrs = ''		THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')'		;* Optional
 | 
			
		||||
    IF RIHKey = ''			THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
 | 
			
		||||
    IF RL_Id = ''			THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
 | 
			
		||||
 | 
			
		||||
IF ErrorMsg NE '' THEN RETURN
 | 
			
		||||
    IF ErrorMsg NE '' THEN RETURN
 | 
			
		||||
 | 
			
		||||
RIHRec = ''
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_INST_RL_ID$> 		= RL_ID
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$>	= ReactWfrCnt
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$>		= ReactHrs
 | 
			
		||||
    RIHRec = ''
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_INST_RL_ID$> 		= RL_ID
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_INST_REACT_WFR_CNT$>	= ReactWfrCnt
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_INST_REACT_HRS$>		= ReactHrs
 | 
			
		||||
 | 
			
		||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
 | 
			
		||||
    otParms = 'REACT_ITEM_HIST':@RM:RIHKey:@RM:@RM:RIHRec
 | 
			
		||||
 | 
			
		||||
obj_Tables('WriteRec',otParms)
 | 
			
		||||
    obj_Tables('WriteRec',otParms)
 | 
			
		||||
    RINo = Field(RIHKey, '*', 2, 1)
 | 
			
		||||
    React_Item_Services('UpdateReactItemStatus', RINo)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -90,38 +91,36 @@ RETURN
 | 
			
		||||
Remove:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
RIHKey		= Parms[1,@RM]
 | 
			
		||||
RemoveDTM	= Parms[COL2()+1,@RM]		;* Internal format *
 | 
			
		||||
RL_Id		= Parms[COL2()+1,@RM]
 | 
			
		||||
ReactWfrCnt	= Parms[COL2()+1,@RM]
 | 
			
		||||
ReactHrs	= Parms[COL2()+1,@RM]
 | 
			
		||||
    RIHKey		= Parms[1,@RM]
 | 
			
		||||
    RemoveDTM	= Parms[COL2()+1,@RM]		;* Internal format *
 | 
			
		||||
    RL_Id		= Parms[COL2()+1,@RM]
 | 
			
		||||
    ReactWfrCnt	= Parms[COL2()+1,@RM]
 | 
			
		||||
    ReactHrs	= Parms[COL2()+1,@RM]
 | 
			
		||||
 | 
			
		||||
IF RIHKey = ''			THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
 | 
			
		||||
IF RemoveDTM = ''		THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
 | 
			
		||||
IF RL_Id = ''			THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
 | 
			
		||||
*IF ReactWfrCnt = ''	THEN ErrorMsg = 'Null Parameter "ReactWfrCnt" passed to routine. (':Method:')'	;* Optional
 | 
			
		||||
*IF ReactHrs = ''		THEN ErrorMsg = 'Null Parameter "ReactHrs" passed to routine. (':Method:')'		;* Optional
 | 
			
		||||
    IF RIHKey = ''			THEN ErrorMsg = 'Null Parameter "RIHKey" passed to routine. (':Method:')'
 | 
			
		||||
    IF RemoveDTM = ''		THEN ErrorMsg = 'Null Parameter "RemoveDTM" passed to routine. (':Method:')'
 | 
			
		||||
    IF RL_Id = ''			THEN ErrorMsg = 'Null Parameter "RL_Id" passed to routine. (':Method:')'
 | 
			
		||||
 | 
			
		||||
IF ErrorMsg NE '' THEN RETURN
 | 
			
		||||
    IF ErrorMsg NE '' THEN RETURN
 | 
			
		||||
 | 
			
		||||
* Read and update record *
 | 
			
		||||
    otParms = 'REACT_ITEM_HIST':@RM:RIHKey
 | 
			
		||||
 | 
			
		||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
 | 
			
		||||
    RIHRec = obj_Tables('ReadRec',otParms)
 | 
			
		||||
 | 
			
		||||
RIHRec = obj_Tables('ReadRec',otParms)
 | 
			
		||||
    IF Get_Status(errCode) THEN
 | 
			
		||||
        Set_Status(0)
 | 
			
		||||
        RIHRec = ''
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
IF Get_Status(errCode) THEN
 | 
			
		||||
	Set_Status(0)
 | 
			
		||||
	RIHRec = ''
 | 
			
		||||
END
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_DTM$>			= RemoveDTM
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_RL_ID$>			= RL_Id
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$>	= ReactWfrCnt
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$>		= ReactHrs
 | 
			
		||||
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_DTM$>			= RemoveDTM
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$>			= RL_Id
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$>	= ReactWfrCnt
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$>		= ReactHrs
 | 
			
		||||
 | 
			
		||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
 | 
			
		||||
obj_Tables('WriteRec',otParms)
 | 
			
		||||
    otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
 | 
			
		||||
    obj_Tables('WriteRec',otParms)
 | 
			
		||||
    RINo = Field(RIHKey, '*', 2, 1)
 | 
			
		||||
    React_Item_Services('UpdateReactItemStatus', RINo)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -130,24 +129,21 @@ RETURN
 | 
			
		||||
ClearRemove:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
RIHKey		= Parms[1,@RM]
 | 
			
		||||
    RIHKey = Parms[1,@RM]
 | 
			
		||||
 | 
			
		||||
IF RIHKey = '' THEN RETURN
 | 
			
		||||
    IF RIHKey = '' THEN RETURN
 | 
			
		||||
 | 
			
		||||
    otParms = 'REACT_ITEM_HIST':@RM:RIHKey
 | 
			
		||||
 | 
			
		||||
* Read and update record *
 | 
			
		||||
    RIHRec = obj_Tables('ReadRec',otParms)
 | 
			
		||||
 | 
			
		||||
otParms = 'REACT_ITEM_HIST':@RM:RIHKey
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_DTM$>			= ''
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_RL_ID$>			= ''
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$>	= ''
 | 
			
		||||
    RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$>		= ''
 | 
			
		||||
 | 
			
		||||
RIHRec = obj_Tables('ReadRec',otParms)
 | 
			
		||||
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_DTM$>			= ''
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_RL_ID$>			= ''
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_REACT_WFR_CNT$>	= ''
 | 
			
		||||
RIHRec<REACT_ITEM_HIST_REM_REACT_HRS$>		= ''
 | 
			
		||||
 | 
			
		||||
otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
 | 
			
		||||
obj_Tables('WriteRec',otParms)
 | 
			
		||||
    otParms = FIELDSTORE(otParms,@RM,4,0,RIHRec)
 | 
			
		||||
    obj_Tables('WriteRec',otParms)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
@ -156,49 +152,50 @@ RETURN
 | 
			
		||||
GetHistory:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
ReactNo		= Parms[1,@RM]
 | 
			
		||||
RINo		= Parms[COL2()+1,@RM]
 | 
			
		||||
RIType		= Parms[COL2()+1,@RM]
 | 
			
		||||
    ReactNo = Parms[1,@RM]
 | 
			
		||||
    RINo    = Parms[COL2()+1,@RM]
 | 
			
		||||
    RIType  = Parms[COL2()+1,@RM]
 | 
			
		||||
 | 
			
		||||
IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
 | 
			
		||||
    IF ReactNo = '' AND RINo = '' AND RIType = '' THEN RETURN
 | 
			
		||||
 | 
			
		||||
OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
 | 
			
		||||
	ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
 | 
			
		||||
	RETURN
 | 
			
		||||
END
 | 
			
		||||
    OPEN 'DICT.REACT_ITEM_HIST' TO DictVar ELSE
 | 
			
		||||
        ErrorMsg = 'Unable to open DICT.REACT_ITEM_HIST for index lookup'
 | 
			
		||||
        RETURN
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
Search = ''
 | 
			
		||||
    Search = ''
 | 
			
		||||
 | 
			
		||||
IF ReactNo NE '' 	THEN Search := 'REACT_NO':@VM:ReactNo:@FM
 | 
			
		||||
IF RINo NE ''		THEN Search := 'RI_NO':@VM:RINo:@FM
 | 
			
		||||
IF RIType NE ''		THEN Search := 'RI_TYPE':@VM:RIType:@FM
 | 
			
		||||
    IF ReactNo NE '' 	THEN Search := 'REACT_NO':@VM:ReactNo:@FM
 | 
			
		||||
    IF RINo NE ''		THEN Search := 'RI_NO':@VM:RINo:@FM
 | 
			
		||||
    IF RIType NE ''		THEN Search := 'RI_TYPE':@VM:RIType:@FM
 | 
			
		||||
 | 
			
		||||
Option = ''
 | 
			
		||||
Flag = ''
 | 
			
		||||
    Option = ''
 | 
			
		||||
    Flag = ''
 | 
			
		||||
 | 
			
		||||
Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag)	;* Get unsorted keys based on Search parameters
 | 
			
		||||
    Btree.Extract(Search, 'REACT_ITEM_HIST', DictVar, RIKeys, Option, Flag)	;* Get unsorted keys based on Search parameters
 | 
			
		||||
 | 
			
		||||
* Put sort data in first column (Install DTM)
 | 
			
		||||
    // Put sort data in first column (Install DTM)
 | 
			
		||||
 | 
			
		||||
WorkList = ''
 | 
			
		||||
riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
 | 
			
		||||
FOR I = 1 TO riCnt
 | 
			
		||||
	RIKey = RIKeys<1,I>
 | 
			
		||||
	WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
 | 
			
		||||
NEXT I
 | 
			
		||||
    WorkList = ''
 | 
			
		||||
    riCnt = COUNT(RIKeys,@VM) + (RIKeys NE '')
 | 
			
		||||
    FOR I = 1 TO riCnt
 | 
			
		||||
        RIKey = RIKeys<1,I>
 | 
			
		||||
        WorkList<I> = FIELD(RIKey,'*',3):@VM:RIKey
 | 
			
		||||
    NEXT I
 | 
			
		||||
 | 
			
		||||
WorkList := @RM	
 | 
			
		||||
    WorkList := @RM	
 | 
			
		||||
 | 
			
		||||
CONVERT @FM:@VM TO @RM:@FM IN WorkList				;* push delimiters higher for V119
 | 
			
		||||
    CONVERT @FM:@VM TO @RM:@FM IN WorkList				;* push delimiters higher for V119
 | 
			
		||||
 | 
			
		||||
CALL V119('S','','D','L',WorkList,'')				;* Descending Left justified sort
 | 
			
		||||
    CALL V119('S','','D','L',WorkList,'')				;* Descending Left justified sort
 | 
			
		||||
 | 
			
		||||
CONVERT @FM:@RM TO @VM:@FM IN WorkList				;* pull delimiters lower
 | 
			
		||||
    CONVERT @FM:@RM TO @VM:@FM IN WorkList				;* pull delimiters lower
 | 
			
		||||
 | 
			
		||||
WorkList[-1,1] = ''	;* Trim trailing delimiter
 | 
			
		||||
    WorkList[-1,1] = ''	;* Trim trailing delimiter
 | 
			
		||||
 | 
			
		||||
FOR I = 1 TO riCnt
 | 
			
		||||
	Result<1,I> = WorkList<I,2>						;* Strip Sort column(s)
 | 
			
		||||
NEXT I
 | 
			
		||||
    FOR I = 1 TO riCnt
 | 
			
		||||
        Result<1,I> = WorkList<I,2>						;* Strip Sort column(s)
 | 
			
		||||
    NEXT I
 | 
			
		||||
 | 
			
		||||
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 Environment_Services, GetTickCount
 | 
			
		||||
 | 
			
		||||
$INSERT REACT_STATE_EQUATES
 | 
			
		||||
$INSERT PROD_SPEC_EQUATES
 | 
			
		||||
@ -28,6 +28,12 @@ $INSERT LOGICAL
 | 
			
		||||
EQU CRLF$	TO \0D0A\
 | 
			
		||||
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"'
 | 
			
		||||
ErrorMsg = ''
 | 
			
		||||
@ -62,6 +68,9 @@ RETURN Result
 | 
			
		||||
ReactRunUnload:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
StartTick = GetTickCount()
 | 
			
		||||
MetricName = 'ReactRunUnload'
 | 
			
		||||
 | 
			
		||||
* Upadate all parameters set at Reactor Unload signature  *
 | 
			
		||||
 | 
			
		||||
ReactNo			= Parms[1,@RM]
 | 
			
		||||
@ -115,6 +124,9 @@ end
 | 
			
		||||
* otParms = FieldStore(otParms,@RM,4,0,RSRec)
 | 
			
		||||
* obj_Tables('WriteRec',otParms)
 | 
			
		||||
 | 
			
		||||
EndTick = GetTickCount()
 | 
			
		||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,9 +20,9 @@ COMPILE FUNCTION obj_React_Status(Method,Parms)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
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 Logging_Services
 | 
			
		||||
DECLARE SUBROUTINE Logging_Services, Mona_Services
 | 
			
		||||
 | 
			
		||||
$INSERT LOGICAL
 | 
			
		||||
$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'
 | 
			
		||||
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"'
 | 
			
		||||
ErrorMsg = ''
 | 
			
		||||
 | 
			
		||||
@ -125,6 +132,9 @@ RETURN
 | 
			
		||||
CassLoad:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CassLoad'
 | 
			
		||||
    
 | 
			
		||||
    ReactNo = Parms[1,@RM]
 | 
			
		||||
    WONo    = Parms[COL2()+1,@RM]
 | 
			
		||||
    CassNo  = Parms[COL2()+1,@RM]
 | 
			
		||||
@ -203,12 +213,17 @@ CassLoad:
 | 
			
		||||
 | 
			
		||||
    Result = IdleTime
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
CassUnload:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CassUnload'
 | 
			
		||||
	
 | 
			
		||||
    ReactNo   = Parms[1,@RM]
 | 
			
		||||
    WONo      = Parms[COL2()+1,@RM]
 | 
			
		||||
@ -271,12 +286,17 @@ CassUnload:
 | 
			
		||||
        ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
ReactorLoad:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'ReactorLoad'
 | 
			
		||||
	
 | 
			
		||||
    * EpiPro Reactor Load
 | 
			
		||||
 | 
			
		||||
@ -362,11 +382,16 @@ ReactorLoad:
 | 
			
		||||
        ErrorMsg = 'Unable to read REACT_STATUS record ':ReactNo:' for update (':Method:').'
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
* * * * * * *
 | 
			
		||||
ReactorUnload:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'ReactorUnload'
 | 
			
		||||
	
 | 
			
		||||
* EpiPro Reactor Unload
 | 
			
		||||
 | 
			
		||||
@ -432,6 +457,9 @@ ReactorUnload:
 | 
			
		||||
        ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
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   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   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 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 Logging_Services, Set_Property, Delete, Database_Services, SRP_Stopwatch, Material_Services
 | 
			
		||||
Declare subroutine Mona_Services
 | 
			
		||||
 | 
			
		||||
$Insert MSG_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'
 | 
			
		||||
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(Parms))		THEN Parms = ''
 | 
			
		||||
 | 
			
		||||
@ -634,6 +642,9 @@ RETURN
 | 
			
		||||
CurrStatus:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CurrStatus'
 | 
			
		||||
 | 
			
		||||
	IF NOT(ASSIGNED(WOMatKey)) THEN WOMatKey = Parms[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'
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5566,3 +5580,4 @@ ExpCOA:
 | 
			
		||||
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    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 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 WO_MAT_LOG_EQUATES
 | 
			
		||||
@ -49,6 +49,13 @@ Headers     = 'Logging DTM'
 | 
			
		||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
 | 
			
		||||
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"'
 | 
			
		||||
ErrorMsg = ''
 | 
			
		||||
 | 
			
		||||
@ -77,6 +84,8 @@ RETURN Result
 | 
			
		||||
* * * * * * *
 | 
			
		||||
Create:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'Create'
 | 
			
		||||
	
 | 
			
		||||
    LogFile		= Parms[1,@RM]
 | 
			
		||||
    TransDTM	= Parms[COL2()+1,@RM]
 | 
			
		||||
@ -233,6 +242,8 @@ Create:
 | 
			
		||||
    	ErrorMsg = Error_Services('GetMessage')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -364,3 +375,4 @@ Post:
 | 
			
		||||
    
 | 
			
		||||
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 SUBROUTINE  Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA
 | 
			
		||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount
 | 
			
		||||
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 WO_REACT_EQUATES
 | 
			
		||||
@ -24,6 +25,7 @@ $INSERT PRS_STAGE_EQUATES
 | 
			
		||||
$INSERT WO_MAT_EQUATES
 | 
			
		||||
$INSERT RDS_EQUATES
 | 
			
		||||
$INSERT QA_MET_EQUATES			;* Used in GetQAMet data structure return variable
 | 
			
		||||
$Insert LOGICAL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ErrTitle = 'Error in Stored Procedure "obj_PRS_Prop"'
 | 
			
		||||
@ -40,6 +42,13 @@ END
 | 
			
		||||
Result = ''
 | 
			
		||||
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
 | 
			
		||||
	CASE Method = 'AddRdsNo'	; GOSUB AddRdsNo
 | 
			
		||||
	CASE Method = 'RemRdsNo'	; GOSUB RemRdsNo
 | 
			
		||||
@ -61,6 +70,9 @@ RETURN Result
 | 
			
		||||
AddRdsNo:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
StartTick = GetTickCount()
 | 
			
		||||
MetricName = 'AddRdsNo'
 | 
			
		||||
 | 
			
		||||
WONo	= Parms[1,@RM]
 | 
			
		||||
StepNo	= 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
 | 
			
		||||
 | 
			
		||||
EndTick = GetTickCount()
 | 
			
		||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -143,6 +158,9 @@ RETURN
 | 
			
		||||
RemRDSNo:
 | 
			
		||||
* * * * * * *
 | 
			
		||||
 | 
			
		||||
StartTick = GetTickCount()
 | 
			
		||||
MetricName = 'RemRDSNo'
 | 
			
		||||
 | 
			
		||||
WONo	= Parms[1,@RM]
 | 
			
		||||
StepNo	= 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
 | 
			
		||||
 | 
			
		||||
EndTick = GetTickCount()
 | 
			
		||||
Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,8 @@
 | 
			
		||||
Compile function Override_Log_Services(@Service, @Params)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$insert LOGICAL
 | 
			
		||||
$Insert SERVICE_SETUP
 | 
			
		||||
$insert APP_INSERTS
 | 
			
		||||
$Insert OVERRIDE_LOG_EQUATES
 | 
			
		||||
 | 
			
		||||
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='')
 | 
			
		||||
	
 | 
			
		||||
	RecKey = ''
 | 
			
		||||
	ErrorMsg = ''
 | 
			
		||||
	RecKey   = ''
 | 
			
		||||
    for each TableName in Table using @VM setting TablePos
 | 
			
		||||
    	RecKey<1,-1> = Nextkey('OVERRIDE_LOG')
 | 
			
		||||
    	RecKey                        = Nextkey('OVERRIDE_LOG')
 | 
			
		||||
		orRec                         = ''
 | 
			
		||||
		orRec<OVERRIDE_LOG_TABLE$>    = Table<1, TablePos>
 | 
			
		||||
		orRec<OVERRIDE_LOG_KEY$>      = Key<1, TablePos>
 | 
			
		||||
@ -45,6 +47,7 @@ Service Create(Table, Key, OverrideUser, OverrideComment, OverrideType=OVERRIDE_
 | 
			
		||||
    
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service GetOverrideLogKeys(EntityId, Table, Type, User, DateTimeFrom, DateTimeTo)
 | 
			
		||||
	
 | 
			
		||||
	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.')
 | 
			
		||||
	end
 | 
			
		||||
	Response = keylist
 | 
			
		||||
	
 | 
			
		||||
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  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  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    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
 | 
			
		||||
@ -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'
 | 
			
		||||
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
 | 
			
		||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
			
		||||
end
 | 
			
		||||
@ -229,12 +236,6 @@ Service CalculateHgCVData(Datapoints)
 | 
			
		||||
            Min    = Min(Min, DataPoint)
 | 
			
		||||
            Max    = Max(Max, DataPoint)
 | 
			
		||||
            // 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        
 | 
			
		||||
        // Range %
 | 
			
		||||
        Locate Index in RangePoints using ',' setting unusedIndex then
 | 
			
		||||
@ -256,25 +257,15 @@ Service CalculateHgCVData(Datapoints)
 | 
			
		||||
    EdgeMean4mm   = Edge4mmSum / 4
 | 
			
		||||
    EdgeMean10mm  = Edge10mmSum / 4
 | 
			
		||||
    If EdgeMean10mm GT 0 then
 | 
			
		||||
*        Delta1Avg     = Delta1/4
 | 
			
		||||
*        Delta2Avg     = Delta2/4
 | 
			
		||||
        EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum)  / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
 | 
			
		||||
    
 | 
			
		||||
        // Range %
 | 
			
		||||
        Range           = RangeMax - RangeMin
 | 
			
		||||
        NumRangePoints  = DCount(RangePoints, ',')
 | 
			
		||||
        RangeAvg        = RangeAvg / NumRangePoints
 | 
			
		||||
        RangePct        = (Range / RangeAvg) * 100
 | 
			
		||||
        
 | 
			
		||||
*        EdgeMeanDelta   = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
 | 
			
		||||
*        RangePct        = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
 | 
			
		||||
    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         = ''
 | 
			
		||||
    TotalDataPoints = DCount(DataPoints, @VM)
 | 
			
		||||
    If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
 | 
			
		||||
@ -361,25 +352,18 @@ Service PostROTRRequest(RDSNo)
 | 
			
		||||
            If Flag EQ 0 then
 | 
			
		||||
                If RequestKeyID EQ '' then
 | 
			
		||||
                    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()
 | 
			
		||||
                        RequestTime  = Time()
 | 
			
		||||
                        RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
 | 
			
		||||
                        RequestRow   = ''
 | 
			
		||||
                        Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
 | 
			
		||||
                        If Error_Services('NoError') then
 | 
			
		||||
                            // Log success
 | 
			
		||||
                            LogData<3>   = 'Successfully posted ROTR request for ':RDSNo:'.'
 | 
			
		||||
                            Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
 | 
			
		||||
                        end else
 | 
			
		||||
                            ErrorMessage = Error_Services('GetMessage')                       
 | 
			
		||||
                        end
 | 
			
		||||
                    end else
 | 
			
		||||
                        ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'        
 | 
			
		||||
                    end
 | 
			
		||||
					RequestDate  = Date()
 | 
			
		||||
					RequestTime  = Time()
 | 
			
		||||
					RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
 | 
			
		||||
					RequestRow   = ''
 | 
			
		||||
					Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
 | 
			
		||||
					If Error_Services('NoError') then
 | 
			
		||||
						// Log success
 | 
			
		||||
						LogData<3>   = 'Successfully posted ROTR request for ':RDSNo:'.'
 | 
			
		||||
						Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
 | 
			
		||||
					end else
 | 
			
		||||
						ErrorMessage = Error_Services('GetMessage')                       
 | 
			
		||||
					end
 | 
			
		||||
                end else
 | 
			
		||||
                    ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
 | 
			
		||||
                end
 | 
			
		||||
@ -510,13 +494,6 @@ Service ProcessROTRRequest(RDSNo)
 | 
			
		||||
                        Swap @FM with ',' in ResponseCopy
 | 
			
		||||
                        LogData<3>                                             = 'ROTR Status response: ':Response
 | 
			
		||||
                        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_REASON$>          = Response<2>
 | 
			
		||||
                        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>
 | 
			
		||||
                        // Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
 | 
			
		||||
                        // 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$)        			
 | 
			
		||||
                    end else
 | 
			
		||||
                        ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
 | 
			
		||||
@ -569,6 +545,7 @@ end service
 | 
			
		||||
// 
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service GetROTRStatus(RDSKey)
 | 
			
		||||
	
 | 
			
		||||
    RDSRec               = Database_Services('ReadDataRow', 'RDS', RDSKey)
 | 
			
		||||
    WONo                 = RDSRec<RDS_WO$>
 | 
			
		||||
    RDSCassNo            = RDSRec<RDS_CASS_NO$>
 | 
			
		||||
@ -1060,14 +1037,12 @@ Service GetSODPerWafer(RDSKey, TencorRecipe, ScanDTM)
 | 
			
		||||
            Until ValidData EQ False$
 | 
			
		||||
            WaferNo = Wafer<1>
 | 
			
		||||
            If WaferNo NE '' then
 | 
			
		||||
                ValidData = WaferNo Matches '*2N'
 | 
			
		||||
            	Convert '*' to '' in WaferNo
 | 
			
		||||
                ValidData = ( (WaferNo Matches '1N') or (WaferNo Matches '2N') )
 | 
			
		||||
                If ValidData then                
 | 
			
		||||
                    WaferNo      = Trim(WaferNo[-1, 'B*'])
 | 
			
		||||
                    If WaferNo[1, 1] EQ 0 then WaferNo [1, 1] = ''
 | 
			
		||||
                    If WaferNo EQ 1 then Done = True$
 | 
			
		||||
                    SumOfDefects = Wafer<2>
 | 
			
		||||
                    // Validate SumOfDefects value is formatted correctly (any number of integers)
 | 
			
		||||
                    ValidData    = SumOfDefects Matches '0N'
 | 
			
		||||
                    Sort         = Wafer<3>
 | 
			
		||||
                    Locate WaferNo in Response<1> using @VM setting WaferPos else
 | 
			
		||||
                        // No SOD value for this wafer yet recorded, so add it to the response array.
 | 
			
		||||
@ -1220,12 +1195,7 @@ Service ProcessWaferImageRequests()
 | 
			
		||||
                        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
 | 
			
		||||
                        WaferNo = Fmt(TrimF(WaferNo), 'R(0)#2')
 | 
			
		||||
                        Query = "DECLARE @RDS         varchar(10) "                                                     |
 | 
			
		||||
                              : "DECLARE @RECIPE      varchar(30) "                                                     |
 | 
			
		||||
                              : "DECLARE @WFRID       varchar(10) "                                                     |
 | 
			
		||||
@ -1247,7 +1217,7 @@ Service ProcessWaferImageRequests()
 | 
			
		||||
                        InsertDate   = InsertDTM[1, 'F ']
 | 
			
		||||
                        Year         = Field(InsertDate, '/', 3, 1) 
 | 
			
		||||
                        WorkWeek     = 'WW':Date_Services('GetWeekNum', InsertDate)
 | 
			
		||||
                        PDFPath      = WaferMapRoot:'_\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
 | 
			
		||||
                        PDFPath      = WaferMapRoot:'\':Year:'\':WorkWeek:'\':AttachmentID:'\image.pdf'
 | 
			
		||||
                        Set_Status(0)
 | 
			
		||||
                        PDFFile      = ''
 | 
			
		||||
                        OSRead PDFFile from PDFPath then
 | 
			
		||||
@ -1294,100 +1264,6 @@ Service ProcessWaferImageRequests()
 | 
			
		||||
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
 | 
			
		||||
//
 | 
			
		||||
@ -1755,9 +1631,7 @@ Service ROTRImpactReport()
 | 
			
		||||
            column = OleGetProperty( xlSht, 'Range' , 'K:K' )
 | 
			
		||||
            OlePutProperty( column , 'ColumnWidth' , '15' )
 | 
			
		||||
            OlePutProperty( column , 'NumberFormat' , '0.0%' )     
 | 
			
		||||
            
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
@ -1804,6 +1678,8 @@ end service
 | 
			
		||||
//              False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'PreEpiSignatureReady'
 | 
			
		||||
 | 
			
		||||
    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.'
 | 
			
		||||
@ -1902,6 +1778,8 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1918,6 +1796,8 @@ end service
 | 
			
		||||
//  Reponse   - True$ if PRE stage was successfully signed, False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'SignPreEpiStage'
 | 
			
		||||
 | 
			
		||||
    Error_Services('Clear')
 | 
			
		||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') or (Reactor EQ '') then
 | 
			
		||||
@ -1969,71 +1849,66 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
			
		||||
    
 | 
			
		||||
    PreEpiSig   = RDSRec<RDS_PRE_EPI_SIG$>
 | 
			
		||||
    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
 | 
			
		||||
		
 | 
			
		||||
            WOMatKey        = WONo:'*':CassNo
 | 
			
		||||
            WOMatRec		= Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
            WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
 | 
			
		||||
            SigAction		= WOStep:'VER'
 | 
			
		||||
		WOMatKey        = WONo:'*':CassNo
 | 
			
		||||
		WOMatRec		= Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
 | 
			
		||||
		WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
 | 
			
		||||
		SigAction		= WOStep:'VER'
 | 
			
		||||
 | 
			
		||||
            LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
 | 
			
		||||
                WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
 | 
			
		||||
                CurrDTM  = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
 | 
			
		||||
            END ELSE
 | 
			
		||||
                WOMatSig = ''
 | 
			
		||||
            END
 | 
			
		||||
		LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
 | 
			
		||||
			WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
 | 
			
		||||
			CurrDTM  = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
 | 
			
		||||
		END ELSE
 | 
			
		||||
			WOMatSig = ''
 | 
			
		||||
		END
 | 
			
		||||
		
 | 
			
		||||
            RDSSig = PreEpiSig
 | 
			
		||||
		RDSSig = PreEpiSig
 | 
			
		||||
		
 | 
			
		||||
            BEGIN CASE
 | 
			
		||||
                CASE (WOMatSig EQ '') AND (RDSSig NE '')
 | 
			
		||||
		BEGIN CASE
 | 
			
		||||
			CASE (WOMatSig EQ '') AND (RDSSig NE '')
 | 
			
		||||
		
 | 
			
		||||
                    * Signature missing on WO_MAT                       
 | 
			
		||||
                    SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
 | 
			
		||||
                    SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
 | 
			
		||||
                    owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
 | 
			
		||||
                    * Sets VER signature
 | 
			
		||||
*                    obj_WO_Mat('SetSignature',owmParms)
 | 
			
		||||
                    errCode = ''
 | 
			
		||||
                    IF Get_Status(errCode) THEN
 | 
			
		||||
                        ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
			
		||||
                        Error_Services('Set', ErrorMsg)
 | 
			
		||||
                        Response = False$
 | 
			
		||||
                    END else
 | 
			
		||||
                        Response = True$
 | 
			
		||||
                    end
 | 
			
		||||
                    return
 | 
			
		||||
				* Signature missing on WO_MAT                       
 | 
			
		||||
				SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
 | 
			
		||||
				SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
 | 
			
		||||
				owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
 | 
			
		||||
				* Sets VER signature
 | 
			
		||||
				errCode = ''
 | 
			
		||||
				IF Get_Status(errCode) THEN
 | 
			
		||||
					ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
			
		||||
					Error_Services('Set', ErrorMsg)
 | 
			
		||||
					Response = False$
 | 
			
		||||
				END else
 | 
			
		||||
					Response = True$
 | 
			
		||||
				end
 | 
			
		||||
				return
 | 
			
		||||
						   
 | 
			
		||||
                CASE (RDSSig = '') AND (WOMatSig NE '')
 | 
			
		||||
			CASE (RDSSig = '') AND (WOMatSig NE '')
 | 
			
		||||
			
 | 
			
		||||
                    * Signature missing on RDS                        
 | 
			
		||||
                    CurrDate                      = CurrDTM[1,' ']
 | 
			
		||||
                    CurrTime                      = CurrDTM[COL2()+1,' ']                        
 | 
			
		||||
                    RDSRec<RDS_PRE_EPI_SIG$>      = WOMatSig
 | 
			
		||||
                    RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
 | 
			
		||||
                    RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
 | 
			
		||||
                    Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
 | 
			
		||||
                    Response                      = True$                      
 | 
			
		||||
                    return
 | 
			
		||||
				* Signature missing on RDS                        
 | 
			
		||||
				CurrDate                      = CurrDTM[1,' ']
 | 
			
		||||
				CurrTime                      = CurrDTM[COL2()+1,' ']                        
 | 
			
		||||
				RDSRec<RDS_PRE_EPI_SIG$>      = WOMatSig
 | 
			
		||||
				RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
 | 
			
		||||
				RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
 | 
			
		||||
				Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
 | 
			
		||||
				Response                      = True$                      
 | 
			
		||||
				return
 | 
			
		||||
				
 | 
			
		||||
                CASE RDSSig NE '' AND WOMatSig NE ''
 | 
			
		||||
			CASE RDSSig NE '' AND WOMatSig NE ''
 | 
			
		||||
				
 | 
			
		||||
                    ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
 | 
			
		||||
                    Error_Services('Set', ErrorMessage)
 | 
			
		||||
                    Response = False$                    
 | 
			
		||||
                    return
 | 
			
		||||
				ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
 | 
			
		||||
				Error_Services('Set', ErrorMessage)
 | 
			
		||||
				Response = False$                    
 | 
			
		||||
				return
 | 
			
		||||
				
 | 
			
		||||
                CASE Otherwise$
 | 
			
		||||
                    Null
 | 
			
		||||
			CASE Otherwise$
 | 
			
		||||
				Null
 | 
			
		||||
				
 | 
			
		||||
            END CASE
 | 
			
		||||
		END CASE
 | 
			
		||||
		
 | 
			
		||||
        END	;* End of check for Reactor Type
 | 
			
		||||
 | 
			
		||||
*    END           
 | 
			
		||||
	END	;* End of check for Reactor Type   
 | 
			
		||||
 | 
			
		||||
    SigDate = OCONV( Date(), 'D2/' )
 | 
			
		||||
    SigTime	= OCONV( Time(), 'MTS' )
 | 
			
		||||
@ -2047,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
 | 
			
		||||
        
 | 
			
		||||
*        obj_WO_Mat('SetSignature',owmParms)
 | 
			
		||||
        IF Get_Status(errCode) THEN
 | 
			
		||||
            ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
 | 
			
		||||
            Error_Services('Set', ErrorMessage)
 | 
			
		||||
@ -2101,6 +1975,8 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2120,6 +1996,8 @@ end service
 | 
			
		||||
//              False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'LoadSignatureReady'
 | 
			
		||||
    
 | 
			
		||||
    Error_Services('Clear')
 | 
			
		||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
			
		||||
@ -2212,16 +2090,8 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
			
		||||
        return
 | 
			
		||||
    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
 | 
			
		||||
    	
 | 
			
		||||
		IF Supplement NE True$ then
 | 
			
		||||
            ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
 | 
			
		||||
            Error_Services('Set', ErrorMsg)
 | 
			
		||||
@ -2236,13 +2106,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
			
		||||
        return
 | 
			
		||||
    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
 | 
			
		||||
    //Load Lock Required Check
 | 
			
		||||
    LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');                      
 | 
			
		||||
@ -2316,49 +2179,26 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
			
		||||
        Return
 | 
			
		||||
    END
 | 
			
		||||
 
 | 
			
		||||
*    IF ReactorType NE 'EPP' THEN
 | 
			
		||||
	If PreFlag EQ True$ then
 | 
			
		||||
		// 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.       
 | 
			
		||||
		Stage = 'VER'
 | 
			
		||||
	end else
 | 
			
		||||
		Stage = 'LOAD'
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
        If PreFlag EQ True$ then
 | 
			
		||||
            // 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.       
 | 
			
		||||
            Stage = 'VER'
 | 
			
		||||
        end else
 | 
			
		||||
            Stage = 'LOAD'
 | 
			
		||||
        end
 | 
			
		||||
	If ReactorType EQ 'EPP' then
 | 
			
		||||
		WOMatKey = ''
 | 
			
		||||
	end else
 | 
			
		||||
		WOMatKey = WONo:'*':CassNo
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
      	If ReactorType EQ 'EPP' then
 | 
			
		||||
			WOMatKey = ''
 | 
			
		||||
		end else
 | 
			
		||||
			WOMatKey = WONo:'*':CassNo
 | 
			
		||||
		end
 | 
			
		||||
	Signature_Services('CheckSigOrder', WOMatKey, Stage, False$, RDSNo)
 | 
			
		||||
	
 | 
			
		||||
        Signature_Services('CheckSigOrder', WOMatKey, Stage, False$, RDSNo)
 | 
			
		||||
        
 | 
			
		||||
        If Error_Services('HasError') then
 | 
			
		||||
            Response = False$
 | 
			
		||||
            Return
 | 
			
		||||
        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
 | 
			
		||||
	If Error_Services('HasError') then
 | 
			
		||||
		Response = False$
 | 
			
		||||
		Return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
 | 
			
		||||
    SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
 | 
			
		||||
@ -2404,9 +2244,13 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service LoadExtra1stReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2418,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
 | 
			
		||||
		Response = True$
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnsignLoadExtra1stReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2437,7 +2284,9 @@ Service UnsignLoadExtra1stReady(RDSNo)
 | 
			
		||||
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service LoadExtra2ndReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2449,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
 | 
			
		||||
		Response = True$
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnsignLoadExtra2ndReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2465,8 +2317,10 @@ Service UnsignLoadExtra2ndReady(RDSNo)
 | 
			
		||||
			Response = True$
 | 
			
		||||
		end		
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
// SignLoadStage
 | 
			
		||||
//
 | 
			
		||||
@ -2480,6 +2334,8 @@ end service
 | 
			
		||||
//              False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'SignLoadStage'
 | 
			
		||||
    
 | 
			
		||||
    Error_Services('Clear')
 | 
			
		||||
    If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
 | 
			
		||||
@ -2687,6 +2543,8 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2702,6 +2560,8 @@ end service
 | 
			
		||||
//              False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'UnloadSignatureReady'
 | 
			
		||||
 | 
			
		||||
    If (RDSNo EQ '') or (Username EQ '') or (Reactor EQ '') then
 | 
			
		||||
        ErrorMsg = 'RDSNo or Username or Reactor not supplied in the ':Service:' service.'
 | 
			
		||||
@ -2751,39 +2611,17 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
			
		||||
    end
 | 
			
		||||
    ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
 | 
			
		||||
 | 
			
		||||
	If ReactorType EQ 'EPP' then
 | 
			
		||||
		WOMatKey = ''
 | 
			
		||||
	end else
 | 
			
		||||
		WOMatKey = WONo:'*':CassNo
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
*    IF ReactorType NE 'EPP' THEN
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        If ReactorType EQ 'EPP' then
 | 
			
		||||
        	WOMatKey = ''
 | 
			
		||||
        end else
 | 
			
		||||
        	WOMatKey = WONo:'*':CassNo
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD', RDSNo)
 | 
			
		||||
        If Error_Services('HasError') then
 | 
			
		||||
            Response = False$
 | 
			
		||||
            return
 | 
			
		||||
        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
 | 
			
		||||
	Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD', RDSNo)
 | 
			
		||||
	If Error_Services('HasError') then
 | 
			
		||||
		Response = False$
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
    
 | 
			
		||||
    LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
 | 
			
		||||
    If LWIInstAckReq EQ True$ then
 | 
			
		||||
@ -2801,7 +2639,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
			
		||||
        return
 | 
			
		||||
    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                              
 | 
			
		||||
    IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
 | 
			
		||||
            IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
 | 
			
		||||
@ -2871,9 +2708,13 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnloadExtra1stReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2885,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
 | 
			
		||||
		Response = True$
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnloadExtra2ndReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2899,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
 | 
			
		||||
		Response = True$
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnsignUnloadExtra1stReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2918,7 +2765,9 @@ Service UnsignUnloadExtra1stReady(RDSNo)
 | 
			
		||||
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UnsignUnloadExtra2ndReady(RDSNo)
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	RDSRec                  = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	StandardLoadSignature   = RDSRec<RDS_OPERATOR_IN$>
 | 
			
		||||
@ -2932,6 +2781,7 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
 | 
			
		||||
			Response = True$
 | 
			
		||||
		end		
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2946,6 +2796,9 @@ end service
 | 
			
		||||
//  Response  - True$ if UNLOAD stage was successfully signed , False$ otherwise.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'SignUnloadStage'
 | 
			
		||||
    
 | 
			
		||||
    If (RDSNo EQ '') or (Username EQ '') then
 | 
			
		||||
        ErrorMsg = 'RDSNo or Username not supplied in the ':Service:' service.'
 | 
			
		||||
        Error_Services('Add', ErrorMsg)
 | 
			
		||||
@ -3018,7 +2871,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
			
		||||
 | 
			
		||||
        * 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		
 | 
			
		||||
*        obj_WO_Mat('SetSignature',owmParms)
 | 
			
		||||
                        
 | 
			
		||||
        IF Get_Status(errCode) THEN
 | 
			
		||||
            ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
 | 
			
		||||
@ -3052,9 +2904,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
			
		||||
 | 
			
		||||
            obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
 | 
			
		||||
            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<1> = LoggingDTM
 | 
			
		||||
                LogData<2> = @User4
 | 
			
		||||
@ -3070,7 +2919,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
			
		||||
        InCassettes = RDSRec<RDS_IN_CASS_NO$>
 | 
			
		||||
        InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
 | 
			
		||||
        obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
 | 
			
		||||
        //Reactor_Services('IncrementWfrMetrics', RDSNo)
 | 
			
		||||
    end
 | 
			
		||||
                    
 | 
			
		||||
    RDSRec<RDS_OPERATOR_OUT$> = SigBy
 | 
			
		||||
@ -3143,6 +2991,8 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
 | 
			
		||||
        Response = False$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3477,97 +3327,9 @@ Service SignFQAStage(RDSNo, Username)
 | 
			
		||||
            NEXT Index
 | 
			
		||||
        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 *
 | 
			
		||||
        *************************
 | 
			
		||||
        ! 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}
 | 
			
		||||
        WafersOut       = {WFRS_OUT}
 | 
			
		||||
        
 | 
			
		||||
@ -3587,23 +3349,18 @@ Service SignFQAStage(RDSNo, Username)
 | 
			
		||||
                    
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        *********************************
 | 
			
		||||
        * 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)
 | 
			
		||||
            If NCRStatus EQ False$ then            
 | 
			
		||||
                If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
 | 
			
		||||
                    ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
 | 
			
		||||
                             : 'number of wafers above the USL threshold. A lead or supervisor must override.'
 | 
			
		||||
                    Error_Services('Add', ErrorMsg)
 | 
			
		||||
                    return
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
		NCRStatus = QA_Services('GetNCRStatus', RDSNo)
 | 
			
		||||
		If NCRStatus EQ False$ then            
 | 
			
		||||
			If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
 | 
			
		||||
				ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
 | 
			
		||||
						 : 'number of wafers above the USL threshold. A lead or supervisor must override.'
 | 
			
		||||
				Error_Services('Add', ErrorMsg)
 | 
			
		||||
				return
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
            
 | 
			
		||||
        *************************
 | 
			
		||||
        * Verify if Shift exist *
 | 
			
		||||
@ -3665,21 +3422,19 @@ Service SignFQAStage(RDSNo, Username)
 | 
			
		||||
        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}
 | 
			
		||||
            CassNo      = {CASS_NO}
 | 
			
		||||
            WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
            WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
            OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
            OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
            If OutOfSpec GT 0 then
 | 
			
		||||
                ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
 | 
			
		||||
                Error_Services('Add', ErrorMsg)
 | 
			
		||||
                return
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
		WONo        = {WO}
 | 
			
		||||
		CassNo      = {CASS_NO}
 | 
			
		||||
		WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
		WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
		OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
		OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
		If OutOfSpec GT 0 then
 | 
			
		||||
			ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
 | 
			
		||||
			Error_Services('Add', ErrorMsg)
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
        *******************************************
 | 
			
		||||
        * Verify if all steps have been completed *
 | 
			
		||||
@ -3752,8 +3507,6 @@ Service SignFQAStage(RDSNo, Username)
 | 
			
		||||
            ;* 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 
 | 
			
		||||
            
 | 
			
		||||
*            obj_WO_Mat('SetSignature',owmParms)        ; * * * * * S I G N A T U R E  * * * * * *
 | 
			
		||||
            
 | 
			
		||||
            IF Get_Status(errCode) THEN
 | 
			
		||||
                ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
 | 
			
		||||
                Error_Services('Add', ErrorMsg)
 | 
			
		||||
@ -3891,5 +3644,3 @@ ClearCursors:
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -254,26 +254,23 @@ Event SIGN_BUTTON.CLICK()
 | 
			
		||||
	end   
 | 
			
		||||
	
 | 
			
		||||
	RDSNo          = Get_Property(@Window : '.RDS_NO','DEFPROP')
 | 
			
		||||
	WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
 | 
			
		||||
	If WCCheckEnabled then
 | 
			
		||||
		****************************************
 | 
			
		||||
		* Verify the Wafer Counter information *
 | 
			
		||||
		****************************************
 | 
			
		||||
		WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')        
 | 
			
		||||
		WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
	****************************************
 | 
			
		||||
	* Verify the Wafer Counter information *
 | 
			
		||||
	****************************************
 | 
			
		||||
	WafersOut       = Get_Property(@WINDOW:'.WAFERS_OUT','TEXT')        
 | 
			
		||||
	WaferCounterQty = Get_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','DEFPROP')
 | 
			
		||||
	
 | 
			
		||||
		*************************************
 | 
			
		||||
		* Wafer Counter -  Quantity Section *
 | 
			
		||||
		*************************************
 | 
			
		||||
		If (WaferCounterQty NE '') then
 | 
			
		||||
			If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
				ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Out quantities do not match.')
 | 
			
		||||
				RETURN 0
 | 
			
		||||
			end
 | 
			
		||||
		end else
 | 
			
		||||
			ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
	*************************************
 | 
			
		||||
	* Wafer Counter -  Quantity Section *
 | 
			
		||||
	*************************************
 | 
			
		||||
	If (WaferCounterQty NE '') then
 | 
			
		||||
		If (WaferCounterQty NE WafersOut) then
 | 
			
		||||
			ErrMsg('Unable to sign FQA because Wafer Counter and Wafers Out quantities do not match.')
 | 
			
		||||
			RETURN 0
 | 
			
		||||
		end
 | 
			
		||||
	end else
 | 
			
		||||
		ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
 | 
			
		||||
		RETURN 0
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	***********************************
 | 
			
		||||
@ -446,26 +443,21 @@ Event SIGN_BUTTON.CLICK()
 | 
			
		||||
    ******************************************
 | 
			
		||||
    * Verify Unload Stage QA Metrology Tests *
 | 
			
		||||
    ******************************************
 | 
			
		||||
 | 
			
		||||
    DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
 | 
			
		||||
    If (DevelopmentFlag EQ True$) then
 | 
			
		||||
        WONo        = Get_Property(@WINDOW:'.WO','DEFPROP')
 | 
			
		||||
        CassNo      = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
 | 
			
		||||
        WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
        WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
        OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
        OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
        If OutOfSpec GT 0 then
 | 
			
		||||
            FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
            ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
            For each FailReason in FailReasons using @VM
 | 
			
		||||
                ErrorMsg := FailReason:CRLF$
 | 
			
		||||
            Next FailReason
 | 
			
		||||
            ErrMsg(ErrorMsg)
 | 
			
		||||
            Return
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
	WONo        = Get_Property(@WINDOW:'.WO','DEFPROP')
 | 
			
		||||
	CassNo      = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
 | 
			
		||||
	WOMatQAKey  = WONo : '*' : CassNo
 | 
			
		||||
	WOMatQARec  = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
	OutOfSpec   = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
	OutOfSpec   = Sum(OutOfSpec)
 | 
			
		||||
	If OutOfSpec GT 0 then
 | 
			
		||||
		FailReasons = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
		ErrorMsg = 'Process Error':@SVM
 | 
			
		||||
		For each FailReason in FailReasons using @VM
 | 
			
		||||
			ErrorMsg := FailReason:CRLF$
 | 
			
		||||
		Next FailReason
 | 
			
		||||
		ErrMsg(ErrorMsg)
 | 
			
		||||
		Return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    *******************************************
 | 
			
		||||
    * Verify if all steps have been completed *
 | 
			
		||||
 | 
			
		||||
@ -84,6 +84,7 @@ $Insert NOTIFICATION_EQUATES
 | 
			
		||||
$Insert DICT_EQUATES
 | 
			
		||||
$Insert COMPANY_EQUATES
 | 
			
		||||
$Insert RETURN_TO_FAB_LOTS_EQUATES
 | 
			
		||||
$Insert TEST_RUN_EQUATES
 | 
			
		||||
 | 
			
		||||
EQU COL$LSID			TO 1
 | 
			
		||||
EQU COL$RECIPE			TO 2
 | 
			
		||||
@ -114,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  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  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    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
 | 
			
		||||
@ -130,6 +131,13 @@ Headers       = 'Logging DTM':@FM:'Ctrl':@FM:'Load/Calculate Time'
 | 
			
		||||
objCtrlLog    = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
 | 
			
		||||
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
 | 
			
		||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
			
		||||
end
 | 
			
		||||
@ -225,6 +233,8 @@ End Service
 | 
			
		||||
// to an RDS record.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service AddComment(RDSNo, Comment, UsernameOpt)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'AddComment'
 | 
			
		||||
	
 | 
			
		||||
	RDSRow   = Database_Services('ReadDataRow', 'RDS', RDSNo)
 | 
			
		||||
	Username = @USER4
 | 
			
		||||
@ -247,6 +257,8 @@ Service AddComment(RDSNo, Comment, UsernameOpt)
 | 
			
		||||
	oblParms := "TOP" :@VM: "TOP" :@VM: "TOP"
 | 
			
		||||
	obj_Post_Log('Create',oblParms)
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -418,6 +430,7 @@ end service
 | 
			
		||||
// Rows are @FM delimted while columns are @VM delimited.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service GetRDSData(WorkOrderNo, Columns, ShowGasGauge, RDSOverrideList)
 | 
			
		||||
	
 | 
			
		||||
	RDSList   = ''
 | 
			
		||||
 | 
			
		||||
	If ( (WorkOrderNo NE '') or (RDSOverrideList NE '') ) then
 | 
			
		||||
@ -431,6 +444,7 @@ Service GetRDSData(WorkOrderNo, Columns, ShowGasGauge, RDSOverrideList)
 | 
			
		||||
			Swap @FM with @VM in RDSOverrideList
 | 
			
		||||
			RDSKeys = RDSOverrideList
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
		StatusCode      = ''
 | 
			
		||||
		If Get_Status(StatusCode) then
 | 
			
		||||
			Error_Services('Add', 'Error calling Extract_SI_Keys in the ' : Service : ' service. StatusCode: ' : StatusCode)
 | 
			
		||||
@ -489,7 +503,9 @@ Service GetRDSData(WorkOrderNo, Columns, ShowGasGauge, RDSOverrideList)
 | 
			
		||||
	end else
 | 
			
		||||
		Error_Services('Add', 'WorkOrderNo or RDSOverrideList argument was missing from the ' : Service : ' service.')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	//Sort based on cassette number
 | 
			
		||||
	Locate 'RUN_ORDER_NUM' in Columns using @VM setting ColNoCassNo else ColNoCassNo = 1
 | 
			
		||||
	RDSList = SRP_Sort_Array(RDSList, 'AR' : ColNoCassNo, True$, @FM)
 | 
			
		||||
	Response    = RDSList
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
@ -745,6 +761,9 @@ Service IsValidSubLot(RDSNo, RDSType, SupplierLot)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetRDSRunHistoryByReactorAndWO'
 | 
			
		||||
	
 | 
			
		||||
	table = "RDS"
 | 
			
		||||
	ErrorMessage = ''
 | 
			
		||||
	RDSRecords = ''
 | 
			
		||||
@ -778,10 +797,16 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO)
 | 
			
		||||
    	end
 | 
			
		||||
    Next RDS
 | 
			
		||||
    Response = FinalRDSSortedByAssignmentDTM<1>
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service IsTWLoggingReqd(RDSNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'IsTWLoggingReqd'
 | 
			
		||||
	
 | 
			
		||||
    IsTWReqd            = False$
 | 
			
		||||
    ExistingTWRuns      = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
 | 
			
		||||
    If ExistingTWRuns EQ '' then
 | 
			
		||||
@ -804,7 +829,7 @@ Service IsTWLoggingReqd(RDSNo)
 | 
			
		||||
                Layer = Field(PRSPropKey, '*', 2)
 | 
			
		||||
                MeasureFreq = PRSPropRec<PRS_PROP_FREQ$>
 | 
			
		||||
                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
 | 
			
		||||
                        CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1	; IsTWReqd = 1
 | 
			
		||||
                        CASE ThisReactorRunOrder = Start					; IsTWReqd = 1
 | 
			
		||||
@ -842,6 +867,30 @@ Service IsTWLoggingReqd(RDSNo)
 | 
			
		||||
        IsTWReqd = False$
 | 
			
		||||
    end
 | 
			
		||||
    Response = IsTWReqd
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service TestWaferRanAfterLoad(RDSNo)
 | 
			
		||||
	TestWaferRanAfterLoad = False$
 | 
			
		||||
	TestWaferKeys = Test_Run_Services('GetTestRunKeysByRDS', RDSNo)
 | 
			
		||||
	for each Key in TestWaferKeys using @VM
 | 
			
		||||
		TestWaferDtm = Xlate('TEST_RUN', Key, TEST_RUN_RUN_DTM$, 'X')
 | 
			
		||||
		TestWaferDate = SRP_DateTime('Date', TestWaferDtm)
 | 
			
		||||
		TestWaferTime = SRP_DateTime('Time', TestWaferDtm)
 | 
			
		||||
		
 | 
			
		||||
		RdsDateIn = Xlate('RDS', RDSNo, RDS_DATE_IN$, 'X')
 | 
			
		||||
		RdsTimeIn = Xlate('RDS', RDSNo, RDS_TIME_IN$, 'X')
 | 
			
		||||
		
 | 
			
		||||
		TestWaferRanAfterLoad = TestWaferDate > RdsDateIn
 | 
			
		||||
		If TestWaferRanAfterLoad EQ False$ then
 | 
			
		||||
			TestWaferRanAfterLoad = (TestWaferDate EQ RdsDateIn) and TestWaferTime GT RdsTimeIn
 | 
			
		||||
		end
 | 
			
		||||
	Until TestWaferRanAfterLoad EQ True$
 | 
			
		||||
	Next Key
 | 
			
		||||
	
 | 
			
		||||
	Response = TestWaferRanAfterLoad
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -1073,6 +1122,8 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service CopyRDSLayerParameters(RDSNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CopyRDSLayerParameters'
 | 
			
		||||
	
 | 
			
		||||
	If (RDSNo NE '') then
 | 
			
		||||
		RunOrderNo  = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
 | 
			
		||||
@ -1125,6 +1176,8 @@ Service CopyRDSLayerParameters(RDSNo)
 | 
			
		||||
		Error_Services('Add', 'RDSNo not supplied in ':Service:' service.')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1800,3 +1853,7 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -277,6 +277,7 @@ Event PUB_SIGN.CLICK()
 | 
			
		||||
				end
 | 
			
		||||
				If (Valid EQ True$) then
 | 
			
		||||
					ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
 | 
			
		||||
					ErrMsg = ''
 | 
			
		||||
					If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
 | 
			
		||||
						WoMatKey = WONo:'*':CassNo
 | 
			
		||||
						IsLastCassetteInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
 | 
			
		||||
@ -298,26 +299,44 @@ Event PUB_SIGN.CLICK()
 | 
			
		||||
									WoMatRecord = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
 | 
			
		||||
									WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = True$
 | 
			
		||||
									
 | 
			
		||||
									Message = ''
 | 
			
		||||
									If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
										Message = 'No material scheduled. Test wafer required.'
 | 
			
		||||
									end else if NextEventHasSamePsn EQ False$ then
 | 
			
		||||
										Message = 'Next work order is a NEW PSN number. Test wafer required.'
 | 
			
		||||
									TestWaferRanSinceLoad = WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$>
 | 
			
		||||
									
 | 
			
		||||
									If TestWaferRanSinceLoad NE True$ then
 | 
			
		||||
										TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
 | 
			
		||||
										WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
 | 
			
		||||
										
 | 
			
		||||
										If TestWaferRanSinceLoad NE True$ then
 | 
			
		||||
											Message = ''
 | 
			
		||||
											If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
												Message = 'No material scheduled. Test wafer required.'
 | 
			
		||||
											end else if NextEventHasSamePsn EQ False$ then
 | 
			
		||||
												Message = 'Next work order is a NEW PSN number. Test wafer required.'
 | 
			
		||||
											end
 | 
			
		||||
											
 | 
			
		||||
											Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
 | 
			
		||||
											
 | 
			
		||||
											TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : '' : @VM : 'REACTOR' : @VM :  Reactor)
 | 
			
		||||
											
 | 
			
		||||
											WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TWLogResult
 | 
			
		||||
											
 | 
			
		||||
											If TWLogResult NE True$ then
 | 
			
		||||
												ErrMsg = 'Unload blocked! You must run a test wafer before signing the unload'
 | 
			
		||||
											end
 | 
			
		||||
										end
 | 
			
		||||
									end
 | 
			
		||||
									
 | 
			
		||||
									MesageAcked = Message_Box(@Window, Message, "Test Wafer Required", MSG_BTN_OK$ + MSG_ICON_EXCLAM$)
 | 
			
		||||
									
 | 
			
		||||
									WoMatRecord<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = True$
 | 
			
		||||
									Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
 | 
			
		||||
									
 | 
			
		||||
									ConfirmNote = 'Test wafer requirement acknowledged. [RDS:' : RDSNo : '], [WO:' : WONo : '], [Cassette:' : CassNo : ']'
 | 
			
		||||
									Reactor_Log_Services('AddComment', Reactor, ConfirmNote, @User4)
 | 
			
		||||
								end
 | 
			
		||||
								Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRecord, True$, False$, False$)
 | 
			
		||||
							end
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					QA_Services('SignUnloadStage', RDSNo, @User4)
 | 
			
		||||
					If ErrMsg NE '' then
 | 
			
		||||
						Error_Services('Add', ErrMsg)
 | 
			
		||||
					end
 | 
			
		||||
					
 | 
			
		||||
					If Error_Services('NoError') then
 | 
			
		||||
						QA_Services('SignUnloadStage', RDSNo, @User4)
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
			If Error_Services('HasError') then
 | 
			
		||||
@ -446,3 +465,4 @@ return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -62,24 +62,80 @@ API reactItems.HEAD
 | 
			
		||||
API reactItems.GET
 | 
			
		||||
    
 | 
			
		||||
    QueryFields  = HTTP_Services('GetHTTPGetString')
 | 
			
		||||
    If Index(QueryFields, 'riType', 1) then
 | 
			
		||||
        RIType = HTTP_Services('GetQueryField', 'riType')
 | 
			
		||||
    If IndexC(QueryFields, 'includeNullRetireDt', 1) then
 | 
			
		||||
        IncludeNullRetireDt = HTTP_Services('GetQueryField', 'includeNullRetireDt')
 | 
			
		||||
        Begin Case
 | 
			
		||||
            Case ( (IncludeNullRetireDt EQ 1) or (IncludeNullRetireDt EQ 0) )
 | 
			
		||||
                Null
 | 
			
		||||
            Case ( (IncludeNullRetireDt _EQC 'true') or (IncludeNullRetireDt _EQC 'yes') )
 | 
			
		||||
                IncludeNullRetireDt = True$
 | 
			
		||||
            Case ( (IncludeNullRetireDt _EQC 'false') or (IncludeNullRetireDt _EQC 'no') )
 | 
			
		||||
                IncludeNullRetireDt = False$
 | 
			
		||||
            Case Otherwise$
 | 
			
		||||
                Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':IncludeNullRetireDt:'" passed in for includeNullRetireDt.')
 | 
			
		||||
        End Case
 | 
			
		||||
    end else
 | 
			
		||||
        RIType = ''
 | 
			
		||||
        IncludeNullRetireDt = ''
 | 
			
		||||
    end    
 | 
			
		||||
    
 | 
			
		||||
    If Error_Services('NoError') then
 | 
			
		||||
        If IndexC(QueryFields, 'showAllDetails', 1) then
 | 
			
		||||
            ShowAllDetails = HTTP_Services('GetQueryField', 'showAllDetails')
 | 
			
		||||
            Begin Case
 | 
			
		||||
                Case ( (ShowAllDetails EQ 1) or (ShowAllDetails EQ 0) )
 | 
			
		||||
                    Null                
 | 
			
		||||
                Case ( (ShowAllDetails _EQC 'true') or (ShowAllDetails _EQC 'yes') )
 | 
			
		||||
                    ShowAllDetails = True$
 | 
			
		||||
                Case ( (ShowAllDetails _EQC 'false') or (ShowAllDetails _EQC 'no') )
 | 
			
		||||
                    ShowAllDetails = False$
 | 
			
		||||
                Case Otherwise$
 | 
			
		||||
                    Error_Services('Add', 'Error in ':CurrentAPI:' API. Invalid value "':ShowAllDetails:'" passed in for showAllDetails.')
 | 
			
		||||
            End Case
 | 
			
		||||
        end else
 | 
			
		||||
            ShowAllDetails = False$
 | 
			
		||||
        end            
 | 
			
		||||
        
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            If IndexC(QueryFields, 'currStatus', 1) then
 | 
			
		||||
                CurrStatus = HTTP_Services('GetQueryField', 'currStatus')
 | 
			
		||||
            end else
 | 
			
		||||
                CurrStatus = ''
 | 
			
		||||
            end
 | 
			
		||||
            If IndexC(QueryFields, 'riType', 1) then
 | 
			
		||||
                RIType = HTTP_Services('GetQueryField', 'riType')
 | 
			
		||||
            end else
 | 
			
		||||
                RIType = ''
 | 
			
		||||
            end
 | 
			
		||||
            If IndexC(QueryFields, 'entryDtStart', 1) then
 | 
			
		||||
                EntryDtStart = HTTP_Services('GetQueryField', 'entryDtStart')
 | 
			
		||||
            end else
 | 
			
		||||
                EntryDtStart = ''
 | 
			
		||||
            end
 | 
			
		||||
            If IndexC(QueryFields, 'entryDtEnd', 1) then
 | 
			
		||||
                EntryDtEnd = HTTP_Services('GetQueryField', 'entryDtEnd')
 | 
			
		||||
            end else
 | 
			
		||||
                EntryDtEnd = ''
 | 
			
		||||
            end
 | 
			
		||||
            If IndexC(QueryFields, 'retireDtStart', 1) then
 | 
			
		||||
                RetireDtStart = HTTP_Services('GetQueryField', 'retireDtStart')
 | 
			
		||||
            end else
 | 
			
		||||
                RetireDtStart = ''
 | 
			
		||||
            end
 | 
			
		||||
            If IndexC(QueryFields, 'retireDtEnd', 1) then
 | 
			
		||||
                RetireDtEnd = HTTP_Services('GetQueryField', 'retireDtEnd')
 | 
			
		||||
            end else
 | 
			
		||||
                RetireDtEnd = ''
 | 
			
		||||
            end
 | 
			
		||||
            
 | 
			
		||||
            StatusCode = 200
 | 
			
		||||
            GoSub CreateHALCollection
 | 
			
		||||
        end else
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 400, Error_Services("GetMessage"))
 | 
			
		||||
    end
 | 
			
		||||
    If Index(QueryFields, 'currStatus', 1 ) then
 | 
			
		||||
        CurrStatus = Http_Services('GetQueryField', 'currStatus')
 | 
			
		||||
    end else
 | 
			
		||||
        CurrStatus = ''
 | 
			
		||||
    end
 | 
			
		||||
    If Index(QueryFields, 'showAllDetails', 1 ) then
 | 
			
		||||
        ShowAllDetails = Http_Services('GetQueryField', 'showAllDetails')
 | 
			
		||||
    end else
 | 
			
		||||
        ShowAllDetails = False$
 | 
			
		||||
    end 
 | 
			
		||||
    StatusCode = 200
 | 
			
		||||
    
 | 
			
		||||
    GoSub CreateHALCollection
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -254,11 +310,7 @@ CreateHALCollection:
 | 
			
		||||
    
 | 
			
		||||
    JSONCollection = ''
 | 
			
		||||
    Abort          = False$
 | 
			
		||||
    If RIType NE '' OR CurrStatus NE '' then
 | 
			
		||||
        ReactItems = React_Item_Services('GetReactItems', RIType, CurrStatus)
 | 
			
		||||
    end else
 | 
			
		||||
        ReactItems = React_Item_Services('GetAllReactItemKeys')
 | 
			
		||||
    end
 | 
			
		||||
    ReactItems     = React_Item_Services('GetReactItems', RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt)
 | 
			
		||||
    
 | 
			
		||||
    If ReactItems NE '' then
 | 
			
		||||
        If SRP_JSON(hJSONCollection, 'New', 'Object') then
 | 
			
		||||
@ -304,3 +356,4 @@ CreateHALCollection:
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -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    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	Nica_Orders_Services, Max, RTI_CreateGUID
 | 
			
		||||
Declare function	Nica_Orders_Services, Max, RTI_CreateGUID, GetTickCount
 | 
			
		||||
 | 
			
		||||
// Report paths for various performance report services.
 | 
			
		||||
TemplatesFolder     = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\'
 | 
			
		||||
@ -91,6 +91,13 @@ LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
LogTime     = Oconv(Time(), 'MTS')
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
@ -101,7 +108,7 @@ Return Response else ''
 | 
			
		||||
// Service Parameter Options
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
Options BOOLEAN       = True$, False$
 | 
			
		||||
Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT'
 | 
			
		||||
Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT', 'EXHAUST_CHAMBER_THK'
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Services
 | 
			
		||||
@ -116,6 +123,8 @@ Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK'
 | 
			
		||||
// 
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'IncrementWfrMetrics'
 | 
			
		||||
	
 | 
			
		||||
	// Get Reactor and run count details
 | 
			
		||||
	RDSRec          = Xlate('RDS', RDSNo, '', 'X', '')
 | 
			
		||||
@ -136,6 +145,7 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
    CurrSuscWfrCnt     = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
    CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
 | 
			
		||||
    CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
 | 
			
		||||
    CurrExhaustThk     = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
    
 | 
			
		||||
    // Arms are not used for EPP
 | 
			
		||||
	If ReactorType NE  'EPP' then
 | 
			
		||||
@ -150,6 +160,7 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
	If CurrSuscWfrCnt     = '' then CurrSuscWfrCnt = 0
 | 
			
		||||
	If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
 | 
			
		||||
	If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
 | 
			
		||||
	If CurrExhaustThk     = '' then CurrExhaustThk = 0
 | 
			
		||||
	
 | 
			
		||||
	Begin Case
 | 
			
		||||
	    
 | 
			
		||||
@ -161,6 +172,7 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
            NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt + 1
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + TargetThickness
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + 1
 | 
			
		||||
            NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + TargetThickness
 | 
			
		||||
	        
 | 
			
		||||
	    Case ReactorType = 'HTR'
 | 
			
		||||
	        
 | 
			
		||||
@ -176,6 +188,7 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
                Case SusceptorSize = 8
 | 
			
		||||
                    // Round up
 | 
			
		||||
@ -192,6 +205,7 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
	        End Case
 | 
			
		||||
	     	
 | 
			
		||||
@ -206,11 +220,14 @@ Service IncrementWfrMetrics(RDSNo)
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
	    
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
	Database_Services('WriteDataRow', 'REACTOR', ReactorNo, NewReactorRec, 1, 0, 0)
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -229,6 +246,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
 | 
			
		||||
					ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
 | 
			
		||||
					ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$>
 | 
			
		||||
					ResponseData<1, 7> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
					//These are the column titles to help us with API Responses
 | 
			
		||||
					ResponseData<2, 1> = 'ReactorID'
 | 
			
		||||
					ResponseData<2, 2> = 'SusceptorWaferCount'
 | 
			
		||||
@ -236,6 +254,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<2, 4> = 'TubeWaferCount'
 | 
			
		||||
					ResponseData<2, 5> = 'TubeThickness'
 | 
			
		||||
					ResponseData<2, 6> = 'ArmsWaferCount'
 | 
			
		||||
					ResponseData<2, 7> = 'ExhuastChamberThickness'
 | 
			
		||||
				Case ReactorType EQ 'HTR'
 | 
			
		||||
					ResponseData<1, 1> = ReactorID
 | 
			
		||||
					ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
@ -243,6 +262,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<1, 4> = ReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$>
 | 
			
		||||
					ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
 | 
			
		||||
					ResponseData<1, 6> = ReactorRec<REACTOR_ARMS_WFR_CNT$>
 | 
			
		||||
					ResponseData<1, 7> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
					//These are the column titles to help us with API Responses
 | 
			
		||||
					ResponseData<2, 1> = 'ReactorID'
 | 
			
		||||
					ResponseData<2, 2> = 'SusceptorWaferCount'
 | 
			
		||||
@ -250,6 +270,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<2, 4> = 'TubeWaferCount'
 | 
			
		||||
					ResponseData<2, 5> = 'TubeThickness'
 | 
			
		||||
					ResponseData<2, 6> = 'ArmsWaferCount'
 | 
			
		||||
					ResponseData<2, 7> = 'ExhuastChamberThickness'
 | 
			
		||||
				Case ReactorType EQ 'EPP'
 | 
			
		||||
					ResponseData<1, 1> = ReactorID
 | 
			
		||||
					ResponseData<1, 2> = ReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
@ -258,6 +279,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<1, 5> = ReactorRec<REACTOR_TUBE_BELL_JAR_THK$>
 | 
			
		||||
					ResponseData<1, 6> = ReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
 | 
			
		||||
					ResponseData<1, 7> = ReactorRec<REACTOR_LOWER_QUARTZ_THK$>
 | 
			
		||||
					ResponseData<1, 8> = ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
					//These are the column titles to help us with API Responses
 | 
			
		||||
					ResponseData<2, 1> = 'ReactorID'
 | 
			
		||||
					ResponseData<2, 2> = 'SusceptorWaferCount'
 | 
			
		||||
@ -266,6 +288,7 @@ Service GetWaferCntMetricsByReactorID(ReactorID)
 | 
			
		||||
					ResponseData<2, 5> = 'BellJarThickness'
 | 
			
		||||
					ResponseData<2, 6> = 'LowerQuartzWaferCount'
 | 
			
		||||
					ResponseData<2, 7> = 'LowerQuartzThickness'
 | 
			
		||||
					ResponseData<2, 8> = 'ExhuastChamberThickness'
 | 
			
		||||
			End Case
 | 
			
		||||
			Response = ResponseData
 | 
			
		||||
		end else
 | 
			
		||||
@ -307,6 +330,7 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
    CurrSuscWfrCnt     = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
    CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
 | 
			
		||||
    CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
 | 
			
		||||
    CurrExhaustThk     = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
    
 | 
			
		||||
    // Arms are not used for EPP
 | 
			
		||||
	If ReactorType NE  'EPP' then
 | 
			
		||||
@ -321,6 +345,7 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
	If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
 | 
			
		||||
	If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
 | 
			
		||||
	If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
 | 
			
		||||
	If CurrExhaustThk     = '' then CurrExhaustThk = 0
 | 
			
		||||
	
 | 
			
		||||
	Begin Case
 | 
			
		||||
	    
 | 
			
		||||
@ -332,6 +357,7 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
            NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt - 1
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - TargetThickness
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - 1
 | 
			
		||||
            NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - TargetThickness
 | 
			
		||||
	        
 | 
			
		||||
	    Case ReactorType = 'HTR'
 | 
			
		||||
	        
 | 
			
		||||
@ -342,11 +368,12 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
	                ThkAddition                                   = (WaferCount / 5) * TargetThickness
 | 
			
		||||
	                NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$>     = CurrTubeBellJarThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_THK$>              = CurrSuscThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_THK$>              = CurrSuscThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
                Case SusceptorSize = 8
 | 
			
		||||
                    // Round up
 | 
			
		||||
@ -363,6 +390,7 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
	        End Case
 | 
			
		||||
	     	
 | 
			
		||||
@ -377,6 +405,7 @@ Service DecrementWfrMetrics(RDSNo)
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
	    
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
@ -410,6 +439,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
    CurrSuscWfrCnt     = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
    CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
 | 
			
		||||
    CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
 | 
			
		||||
    CurrExhaustThk     = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
    
 | 
			
		||||
    // Arms are not used for EPP
 | 
			
		||||
	If ReactorType NE  'EPP' then
 | 
			
		||||
@ -435,6 +465,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
            NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt + 1
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + TargetThickness
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + 1
 | 
			
		||||
            NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + TargetThickness
 | 
			
		||||
	        
 | 
			
		||||
	    Case ReactorType = 'HTR'
 | 
			
		||||
	        
 | 
			
		||||
@ -450,6 +481,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
                Case SusceptorSize = 8
 | 
			
		||||
                    // Round up
 | 
			
		||||
@ -466,6 +498,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
	        End Case
 | 
			
		||||
	     	
 | 
			
		||||
@ -480,6 +513,7 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk + ThkAddition
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr + WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt + WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk + ThkAddition
 | 
			
		||||
	    
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
@ -513,6 +547,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
    CurrSuscWfrCnt     = OldReactorRec<REACTOR_SUSC_WFR_CNT$>
 | 
			
		||||
    CurrLowerQuartzThk = OldReactorRec<REACTOR_LOWER_QUARTZ_THK$>
 | 
			
		||||
    CurrLowerQuartzWfr = OldReactorRec<REACTOR_LOWER_QUARTZ_WFR$>
 | 
			
		||||
    CurrExhaustThk     = OldReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>
 | 
			
		||||
    
 | 
			
		||||
    // Arms are not used for EPP
 | 
			
		||||
	If ReactorType NE  'EPP' then
 | 
			
		||||
@ -527,6 +562,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
	If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0
 | 
			
		||||
	If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0
 | 
			
		||||
	If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0
 | 
			
		||||
	If CurrExhaustThk = '' then CurrExhaustThk = 0
 | 
			
		||||
	
 | 
			
		||||
	Begin Case
 | 
			
		||||
	    
 | 
			
		||||
@ -538,6 +574,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
            NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt - 1
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - TargetThickness
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - 1
 | 
			
		||||
            NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - TargetThickness
 | 
			
		||||
	        
 | 
			
		||||
	    Case ReactorType = 'HTR'
 | 
			
		||||
	        
 | 
			
		||||
@ -548,11 +585,12 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
	                ThkAddition                                   = (WaferCount / 5) * TargetThickness
 | 
			
		||||
	                NewReactorRec<REACTOR_TUBE_BELL_JAR_THK$>     = CurrTubeBellJarThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_TUBE_BELL_JAR_WFR_CNT$> = CurrTubeBellJarCnt - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_THK$>              = CurrSuscThk + ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_THK$>              = CurrSuscThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_SUSC_WFR_CNT$>          = CurrSuscWfrCnt - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
                Case SusceptorSize = 8
 | 
			
		||||
                    // Round up
 | 
			
		||||
@ -569,6 +607,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - CntAddition
 | 
			
		||||
                    NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
                    NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
                    
 | 
			
		||||
	        End Case
 | 
			
		||||
	     	
 | 
			
		||||
@ -583,6 +622,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo)
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_THK$>      = CurrLowerQuartzThk - ThkAddition
 | 
			
		||||
            NewReactorRec<REACTOR_LOWER_QUARTZ_WFR$>      = CurrLowerQuartzWfr - WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_ARMS_WFR_CNT$>          = CurrArmsWfrCnt - WaferCount
 | 
			
		||||
	        NewReactorRec<REACTOR_EXHAUST_CHAMBER_THK$>   = CurrExhaustThk - ThkAddition
 | 
			
		||||
	    
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
@ -596,7 +636,7 @@ end service
 | 
			
		||||
// ResetWfrMetric
 | 
			
		||||
//
 | 
			
		||||
// RDSNo. - [Required]
 | 
			
		||||
// MetricType - [Required]('TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT')
 | 
			
		||||
// MetricType - [Required]('TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK', 'SUSC_WFR_CNT', 'LOWER_QUARTZ_THK', 'LOWER_QUARTZ_WFR', 'ARMS_WFR_CNT', EXHAUST_CHAMBER_THK)
 | 
			
		||||
//
 | 
			
		||||
// Reset a specified REACTOR metric to 0.
 | 
			
		||||
// 
 | 
			
		||||
@ -628,6 +668,9 @@ Service ResetWfrMetric(ReactorNo, MetricType = REACTORMETRIC)
 | 
			
		||||
		Case MetricType = 'ARMS_WFR_CNT'
 | 
			
		||||
			ReactorRec<REACTOR_ARMS_WFR_CNT$> = 0
 | 
			
		||||
			
 | 
			
		||||
		Case MetricType = 'EXHAUST_CHAMBER_THK'
 | 
			
		||||
			ReactorRec<REACTOR_EXHAUST_CHAMBER_THK$> = 0
 | 
			
		||||
			
 | 
			
		||||
	End Case
 | 
			
		||||
	
 | 
			
		||||
	Database_Services('WriteDataRow', 'REACTOR', ReactorNo, ReactorRec, 1, 0, 0)
 | 
			
		||||
@ -1999,16 +2042,35 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
 | 
			
		||||
			If ErrorMsg EQ '' then
 | 
			
		||||
			    AbortAlarmFeatureFlag = Xlate('FEATURE_FLAGS', 'NICA_ABORT_ALARM',  FEATURE_FLAGS.ENABLED$, 'X')
 | 
			
		||||
			    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')
 | 
			
		||||
			        ModeSubCatRespLvl      = Xlate('REACT_PROB_CAT', ModeSubCatId, REACT_PROB_CAT_ABORT_ALARM_RESPONSE_LEVEL$, 'X')
 | 
			
		||||
			        AbortAlarmComp         = Xlate('REACTOR', ReactNo, REACTOR_ABORT_ALARM_COMPLETE$, 'X')
 | 
			
		||||
			        ActiveAbortAlarmOrders = Nica_Orders_Services('GetActiveOrders', 'REACTOR', ReactNo, 'ABORT_ALARM')
 | 
			
		||||
			        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
 | 
			
		||||
			            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."
 | 
			
		||||
			                
 | 
			
		||||
			            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
 | 
			
		||||
                            // 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.
 | 
			
		||||
@ -2020,26 +2082,26 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force
 | 
			
		||||
                            Next ActiveAbortAlarmRespLvl
 | 
			
		||||
                            If ( (Mode _EQC 'WAITING_FOR_OPERATOR') and (ModeSubCatFlowId NE ActiveAbortAlarmFlowIds) ) |
 | 
			
		||||
                            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 			                
 | 
			
		||||
									Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
 | 
			
		||||
									RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
 | 
			
		||||
									CreateAbortAlarmOrder = True$
 | 
			
		||||
								end                            	
 | 
			
		||||
                            end
 | 
			
		||||
 | 
			
		||||
			            Case ( Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') )
 | 
			
		||||
							ReactorType  = Xlate('REACTOR', ReactNo, REACTOR_REACT_TYPE$, 'X')
 | 
			
		||||
							ChecklistIds = Nica_Orders_Services('GetFlowChecklistIds', ModeSubCatFlowId, 'ABORT_ALARM', ReactorType)
 | 
			
		||||
							If ChecklistIds NE '' then 			                
 | 
			
		||||
								Nica_Orders_Services('CreateNewOrder', 'REACTOR', ReactNo, 'ABORT_ALARM', ModeSubCatFlowId, ModeSubCatRespLvl, ChecklistIds)
 | 
			
		||||
								RlComment = 'ABORT/ALARM initiated for flow ':ModeSubCatFlowId:'.'
 | 
			
		||||
			                end
 | 
			
		||||
			            Case ( Not(IntrusiveMaintChecklistActive) and Not(AbortAlarmComp) and Not(AbortAlarmOrderActive) and IndexC(ModeSubCat, 'ABORT/ALARM', 1) and (ModeSubCatFlowId NE '') and (ChecklistIds NE '') )
 | 
			
		||||
			                // Typical ABORT/ALARM case
 | 
			
		||||
			                CreateAbortAlarmOrder = True$
 | 
			
		||||
			                
 | 
			
		||||
			            Case Otherwise$
 | 
			
		||||
			                // Don't create an ABORT/ALARM NICA order
 | 
			
		||||
			                Null
 | 
			
		||||
			                
 | 
			
		||||
			        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
 | 
			
		||||
			
 | 
			
		||||
@ -3552,6 +3614,8 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service GetReactorAvailChamberCount(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetReactorAvailChamberCount'
 | 
			
		||||
	
 | 
			
		||||
	ErrMsg                = 'Error in ReactorServices -> GetReactorAvailChamberCount: '
 | 
			
		||||
	AvailableChamberCount = 0
 | 
			
		||||
@ -3571,6 +3635,8 @@ Service GetReactorAvailChamberCount(ReactNo)
 | 
			
		||||
	end
 | 
			
		||||
	Response = AvailableChamberCount
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4289,3 +4355,4 @@ ClearCursors:
 | 
			
		||||
	
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,10 @@
 | 
			
		||||
Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
 | 
			
		||||
Function REACT_ITEM_ACTIONS(Action, CalcColName, FSList, Handle, Name, FMC, Record, Status, OrigRecord, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)
 | 
			
		||||
/***********************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
    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 Infineon.
 | 
			
		||||
 | 
			
		||||
    Name        :   RDS_Actions
 | 
			
		||||
    Name        :   React_Item_Actions
 | 
			
		||||
 | 
			
		||||
    Description :   Handles calculated columns and MFS calls for the current table.
 | 
			
		||||
 | 
			
		||||
@ -36,39 +36,19 @@ Function REACT_ITEM_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Reco
 | 
			
		||||
                                method.
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        04/10/18    dmb     Original programmer.
 | 
			
		||||
        10/04/18    djs     Added a trigger within the WRITE_RECORD event, which fires when the reactor number has
 | 
			
		||||
                            changed. When this occurs the related RDS_LAYER records for this RDS record are populated
 | 
			
		||||
                            with the most recent associated TOOL_PARMS record. (related by PSN and Reactor)
 | 
			
		||||
        05/12/25    djs     Updated WRITE_PRE action to update the CURR_STATUS_STATIC field if the retire date changes.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$Insert FILE.SYSTEM.EQUATES
 | 
			
		||||
$Insert ACTION_SETUP
 | 
			
		||||
$Insert RDS_EQUATES
 | 
			
		||||
$Insert CLEAN_INSP_EQUATES
 | 
			
		||||
$Insert COMPANY_EQUATES
 | 
			
		||||
$Insert RDS_LAYER_EQUATES
 | 
			
		||||
$Insert TOOL_PARMS_EQUATES
 | 
			
		||||
$Insert RLIST_EQUATES
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert QA_MET_EQUATES
 | 
			
		||||
$Insert PRS_STAGE_EQUATES
 | 
			
		||||
$Insert WO_MAT_EQUATES
 | 
			
		||||
$Insert WO_MAT_QA_EQUATES
 | 
			
		||||
 | 
			
		||||
Equ COMMA$ to ','
 | 
			
		||||
 | 
			
		||||
Declare function    Error_Services, Database_Services, obj_RDS_Test, Logging_Services, Environment_Services, SRP_Math
 | 
			
		||||
Declare function    Tool_Parms_Services, Signature_Services, obj_WO_Mat_QA, Datetime, Override_Services, obj_WO_Mat
 | 
			
		||||
Declare subroutine  Error_Services, Database_Services, Logging_Services, Set_Status, Schedule_Services_Dev
 | 
			
		||||
Declare subroutine  Work_Order_Services, Material_Services, Set_FSError
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$Insert FILE.SYSTEM.EQUATES
 | 
			
		||||
$Insert REACT_ITEM_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function    obj_React_Item
 | 
			
		||||
Declare subroutine  Error_Services
 | 
			
		||||
 | 
			
		||||
If KeyID then GoSub Initialize_System_Variables
 | 
			
		||||
 | 
			
		||||
@ -109,12 +89,8 @@ CalculateColumn:
 | 
			
		||||
    // Make sure the ActionFlow return variable is cleared in case nothing is calculated.
 | 
			
		||||
    ActionFlow = ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----- MFS calls -----------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
READ_RECORD_PRE:
 | 
			
		||||
@ -124,10 +100,9 @@ READ_RECORD_PRE:
 | 
			
		||||
    //    Status          = 0
 | 
			
		||||
    //    Record          = ''
 | 
			
		||||
    //    ActionFlow      = ACTION_STOP$
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
READ_RECORD:
 | 
			
		||||
 | 
			
		||||
    // In order to stop a record from being read in this action these lines of code must be used:
 | 
			
		||||
@ -138,6 +113,7 @@ READ_RECORD:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
READONLY_RECORD_PRE:
 | 
			
		||||
    // In order to stop a record from being read in this action these lines of code must be used:
 | 
			
		||||
    //
 | 
			
		||||
@ -147,6 +123,7 @@ READONLY_RECORD_PRE:
 | 
			
		||||
    //    ActionFlow      = ACTION_STOP$
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
READONLY_RECORD:
 | 
			
		||||
    // In order to stop a record from being read in this action these lines of code must be used:
 | 
			
		||||
    //
 | 
			
		||||
@ -155,51 +132,56 @@ READONLY_RECORD:
 | 
			
		||||
    //    Record          = ''
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WRITE_RECORD_PRE:
 | 
			
		||||
   
 | 
			
		||||
ErrMsg = ''    
 | 
			
		||||
    ErrMsg = ''    
 | 
			
		||||
 | 
			
		||||
//Req'd parameter checks
 | 
			
		||||
ItemType = {RI_TYPE}
 | 
			
		||||
    // Req'd parameter checks
 | 
			
		||||
    ItemType = {RI_TYPE}
 | 
			
		||||
 | 
			
		||||
If ItemType EQ '' then
 | 
			
		||||
    ErrMsg := 'Item Type was not specified. '
 | 
			
		||||
end
 | 
			
		||||
    If ItemType EQ '' then ErrMsg := 'Item Type was not specified. '
 | 
			
		||||
 | 
			
		||||
If ErrMsg NE ''  then
 | 
			
		||||
    Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
 | 
			
		||||
    OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
 | 
			
		||||
    Status        = 0
 | 
			
		||||
    Record        = ''
 | 
			
		||||
    ActionFlow    = ACTION_STOP$
 | 
			
		||||
end
 | 
			
		||||
    If ErrMsg NE ''  then
 | 
			
		||||
        Error_Services('Add', 'Error Saving Reactor Item: ' : ErrMsg)
 | 
			
		||||
        OrigFileError = 104:': Error Saving Reactor Item: ' : ErrMsg
 | 
			
		||||
        Status        = 0
 | 
			
		||||
        Record        = ''
 | 
			
		||||
        ActionFlow    = ACTION_STOP$
 | 
			
		||||
    end else
 | 
			
		||||
        OrigRetireDt = OrigRecord<REACT_ITEM_RETIRE_DT$>
 | 
			
		||||
        NewRetireDt  = Record<REACT_ITEM_RETIRE_DT$>
 | 
			
		||||
        OrigNotes    = OrigRecord<REACT_ITEM_NOTES$>
 | 
			
		||||
        NewNotes     = Record<REACT_ITEM_NOTES$>
 | 
			
		||||
        If ( (OrigRetireDt NE NewRetireDt) or (OrigNotes NE NewNotes) ) then
 | 
			
		||||
            CurrStatus                             = obj_React_Item('CurrStatus', Name:@RM:Record)
 | 
			
		||||
            Record<REACT_ITEM_CURR_STATUS_STATIC$> = CurrStatus
 | 
			
		||||
            SaveRecord                             = Record
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
WRITE_RECORD:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
DELETE_RECORD_PRE:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
DELETE_RECORD:
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
ClearCursors:
 | 
			
		||||
    
 | 
			
		||||
    For counter = 0 to 8
 | 
			
		||||
        ClearSelect counter
 | 
			
		||||
    Next counter
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -251,4 +233,3 @@ Restore_System_Variables:
 | 
			
		||||
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,62 +20,110 @@ Compile function React_Item_Services(@Service, @Params)
 | 
			
		||||
        08/02/22    djs     Original programmer.
 | 
			
		||||
 | 
			
		||||
***********************************************************************************************************************/
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$Insert LOGICAL
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert SERVICE_SETUP
 | 
			
		||||
$Insert RLIST_EQUATES
 | 
			
		||||
$Insert REACT_ITEM_EQUATES
 | 
			
		||||
 | 
			
		||||
Declare function   Database_Services, Error_Services, SRP_JSON, NextKey
 | 
			
		||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services
 | 
			
		||||
GoToService
 | 
			
		||||
Declare function   Database_Services, Error_Services, SRP_JSON, NextKey, SRP_Date, obj_React_Item, SRP_Array
 | 
			
		||||
Declare subroutine SRP_JSON, Error_Services, Btree.Extract, Database_Services, Update_Index
 | 
			
		||||
 | 
			
		||||
Return Response or ""
 | 
			
		||||
GoToService else
 | 
			
		||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// SERVICES
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
Return Response else ''
 | 
			
		||||
 | 
			
		||||
Service GetAllReactItemKeys()
 | 
			
		||||
    AllKeys  = ''
 | 
			
		||||
    RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
 | 
			
		||||
    Done     = False$
 | 
			
		||||
    Reactors = ''
 | 
			
		||||
    Loop
 | 
			
		||||
        Readnext keyId else Done = True$
 | 
			
		||||
    Until Done
 | 
			
		||||
    AllKeys<1,-1> = keyId
 | 
			
		||||
    Repeat
 | 
			
		||||
    Response = AllKeys
 | 
			
		||||
end service
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Service Parameter Options
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
Options BOOLEAN     = True$, False$
 | 
			
		||||
 | 
			
		||||
Service GetReactItems(RIType, CurrStatus)
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Services
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service GetReactItems(RIType, CurrStatus, EntryDtStart, EntryDtEnd, RetireDtStart, RetireDtEnd, IncludeNullRetireDt=BOOLEAN)
 | 
			
		||||
    
 | 
			
		||||
    ErrorMsg = ''
 | 
			
		||||
    Response = ''
 | 
			
		||||
    Swap ',' with @VM in RIType
 | 
			
		||||
    Swap ',' with @VM in CurrStatus
 | 
			
		||||
    
 | 
			
		||||
    Open 'DICT.REACT_ITEM' to DictReactItem then
 | 
			
		||||
        
 | 
			
		||||
        SearchString    = ''
 | 
			
		||||
        If RIType NE '' then SearchString := 'RI_TYPE':@VM:RIType:@FM
 | 
			
		||||
        If CurrStatus NE '' then SearchString := 'CURR_STATUS':@VM:CurrStatus:@FM 
 | 
			
		||||
        RIKeys          = ''
 | 
			
		||||
        Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, '', '')
 | 
			
		||||
        ErrCode         = ''
 | 
			
		||||
        IF Get_Status(ErrCode) then
 | 
			
		||||
            ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract. Error code ':ErrCode:'.'
 | 
			
		||||
    If ( (RIType NE '') or (CurrStatus NE '') or (EntryDtStart NE '') or (EntryDtEnd NE '') or (RetireDtStart NE '') or (RetireDtEnd NE '') or (IncludeNullRetireDt NE '') ) then
 | 
			
		||||
        If EntryDtStart  NE '' and Not(Num(EntryDtStart))  then EntryDtStart  = IConv(EntryDtStart, 'D')
 | 
			
		||||
        If EntryDtEnd    NE '' and Not(Num(EntryDtEnd))    then EntryDtEnd    = IConv(EntryDtEnd, 'D')
 | 
			
		||||
        If RetireDtStart NE '' and Not(Num(RetireDtStart)) then RetireDtStart = IConv(RetireDtStart, 'D')
 | 
			
		||||
        If RetireDtEnd   NE '' and Not(Num(RetireDtEnd))   then RetireDtEnd   = IConv(RetireDtEnd, 'D')
 | 
			
		||||
        Open 'DICT.REACT_ITEM' to DictReactItem then
 | 
			
		||||
            SearchString = ''
 | 
			
		||||
            If RIType NE '' then
 | 
			
		||||
                Swap ',' with @VM in RIType
 | 
			
		||||
                SearchString := 'RI_TYPE':@VM:RIType:@FM
 | 
			
		||||
            end
 | 
			
		||||
            Begin Case
 | 
			
		||||
                Case ( (EntryDtStart NE '') and (EntryDtEnd NE '') )
 | 
			
		||||
                    EntryDtStart = OConv(EntryDtStart - 1, 'D4/')
 | 
			
		||||
                    EntryDtEnd   = OConv(EntryDtEnd + 1, 'D4/')
 | 
			
		||||
                    SearchString := 'ENTER_DT':@VM:EntryDtStart:'~':EntryDtEnd:@FM
 | 
			
		||||
                Case (EntryDtStart NE '')
 | 
			
		||||
                    EntryDtStart  = OConv(EntryDtStart, 'D4/')
 | 
			
		||||
                    SearchString := 'ENTER_DT':@VM:'>=':EntryDtStart:@FM
 | 
			
		||||
                Case (EntryDtEnd NE '')
 | 
			
		||||
                    SearchString := 'ENTER_DT':@VM:'<=':EntryDtEnd:@FM
 | 
			
		||||
                Case Otherwise$
 | 
			
		||||
                    Null
 | 
			
		||||
            End Case
 | 
			
		||||
            Begin Case
 | 
			
		||||
                Case ( (RetireDtStart NE '') and (RetireDtEnd NE '') )
 | 
			
		||||
                    RetireDtStart  = OConv(RetireDtStart - 1, 'D4/')
 | 
			
		||||
                    RetireDtEnd    = OConv(RetireDtEnd + 1, 'D4/')
 | 
			
		||||
                    SearchString  := 'RETIRE_DT':@VM:RetireDtStart:'~':RetireDtEnd
 | 
			
		||||
                    If IncludeNullRetireDt then SearchString := @VM:''
 | 
			
		||||
                    SearchString := @FM                    
 | 
			
		||||
                Case (RetireDtStart NE '')
 | 
			
		||||
                    RetireDtStart  = OConv(RetireDtStart, 'D4/')
 | 
			
		||||
                    SearchString  := 'RETIRE_DT':@VM:'>=':RetireDtStart
 | 
			
		||||
                    If IncludeNullRetireDt then SearchString := @VM:''
 | 
			
		||||
                    SearchString  := @FM                    
 | 
			
		||||
                Case (RetireDtEnd NE '')
 | 
			
		||||
                    SearchString := 'RETIRE_DT':@VM:'<=':RetireDtEnd
 | 
			
		||||
                    If IncludeNullRetireDt then SearchString := @VM:''
 | 
			
		||||
                    SearchString := @FM
 | 
			
		||||
                Case IncludeNullRetireDt
 | 
			
		||||
                    SearchString  := 'RETIRE_DT':@VM:'':@FM
 | 
			
		||||
                Case Otherwise$
 | 
			
		||||
                    Null
 | 
			
		||||
            End Case
 | 
			
		||||
            If CurrStatus NE '' then
 | 
			
		||||
                Swap ',' with @VM in CurrStatus
 | 
			
		||||
                SearchString := 'CURR_STATUS_STATIC':@VM:CurrStatus:@FM
 | 
			
		||||
            end
 | 
			
		||||
            Flag    = ''
 | 
			
		||||
            RIKeys  = ''
 | 
			
		||||
            Btree.Extract(SearchString, 'REACT_ITEM', DictReactItem, RIKeys, 'E', Flag)
 | 
			
		||||
            If Flag EQ 0 then
 | 
			
		||||
                EnterDtms = Xlate('REACT_ITEM', RIKeys, 'ENTER_DTM', 'X')
 | 
			
		||||
                Array     = RIKeys:@FM:EnterDtms
 | 
			
		||||
                Array     = SRP_Array('SortRows', Array, 'DN2', 'ARRAY', @FM, @VM)
 | 
			
		||||
                Response  = Array<1>
 | 
			
		||||
            end else
 | 
			
		||||
                ErrorMsg = 'Error in ':Service:' service. Error calling Btree.Extract.'
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            Response = RIKeys
 | 
			
		||||
            ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
    end else
 | 
			
		||||
        ErrorMsg = 'Error in ':Service:' service. Error opening REACT_ITEM dictionary.'
 | 
			
		||||
        AllKeys  = ''
 | 
			
		||||
        RList('SELECT REACT_ITEM', TARGET_ACTIVELIST$, '', '', '')
 | 
			
		||||
        Done     = False$
 | 
			
		||||
        Loop
 | 
			
		||||
            Readnext KeyId else Done = True$
 | 
			
		||||
        Until Done
 | 
			
		||||
            AllKeys<1, -1> = KeyId
 | 
			
		||||
        Repeat
 | 
			
		||||
        Response       = AllKeys
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    If ErrorMsg NE '' then
 | 
			
		||||
        Error_Services('Add', ErrorMsg)
 | 
			
		||||
    end
 | 
			
		||||
@ -155,7 +203,6 @@ Service ConvertRecordToJSON(KeyID, Record, ItemURL)
 | 
			
		||||
    
 | 
			
		||||
    Response    = jsonRecord
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -326,11 +373,11 @@ Service GetReactItemTemplateJSON()
 | 
			
		||||
    
 | 
			
		||||
    Response    = jsonRecord
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service CreateReactItem(Record)
 | 
			
		||||
    
 | 
			
		||||
    ErrMsg = ''
 | 
			
		||||
    KeyID  = ''
 | 
			
		||||
    If Record NE '' then
 | 
			
		||||
@ -355,6 +402,7 @@ Service CreateReactItem(Record)
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
 | 
			
		||||
    
 | 
			
		||||
    jsonRecord    = ''
 | 
			
		||||
@ -407,6 +455,32 @@ Service ConvertRecordToJSONQuick(KeyID, Record, ItemURL)
 | 
			
		||||
    Response    = jsonRecord
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service UpdateReactItemStatus(RINo)
 | 
			
		||||
    
 | 
			
		||||
    If RINo NE '' then
 | 
			
		||||
        If RowExists('REACT_ITEM', RINo) then
 | 
			
		||||
            RIRec                     = Database_Services('ReadDataRow', 'REACT_ITEM', RINo)
 | 
			
		||||
            If Error_Services('NoError') then
 | 
			
		||||
                Update_Index('REACT_ITEM_HIST', 'RI_NO', False$, True$)
 | 
			
		||||
                ReactItemCurrStatus       = obj_React_Item('CurrStatus', RINo:@RM:RIRec)
 | 
			
		||||
                ReactItemCurrStatusStatic = RIRec<REACT_ITEM_CURR_STATUS_STATIC$>
 | 
			
		||||
                If ReactItemCurrStatus NE ReactItemCurrStatusStatic then
 | 
			
		||||
                    Open 'REACT_ITEM' to hTable then
 | 
			
		||||
                        WriteV ReactItemCurrStatus on hTable, RINo, REACT_ITEM_CURR_STATUS_STATIC$ else
 | 
			
		||||
                            Error_Services('Add', 'Error in ':Service:' service. Error writing CURR_STATUS_STATIC, ':ReactItemCurrStatus:', for REACT_ITEM ':RINo:'.')
 | 
			
		||||
                        end
 | 
			
		||||
                    end else
 | 
			
		||||
                        Error_Services('Add', 'Error in ':Service:' service. Error opening REACT_ITEM table for status update.')
 | 
			
		||||
                    end
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Internal GoSubs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -419,6 +493,3 @@ ClearCursors:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -604,7 +604,7 @@ Service GetMaterialTrackJSON()
 | 
			
		||||
	
 | 
			
		||||
	ErrCode = ''
 | 
			
		||||
	KeyList = ''
 | 
			
		||||
	Query   = 'SELECT MATERIAL_REPORT BY REACT_NO BY WO_NO'
 | 
			
		||||
	Query   = 'SELECT MATERIAL_REPORT BY REACT_NO BY START_DTM'
 | 
			
		||||
	RList(Query, TARGET_ACTIVELIST$, '', '', '')
 | 
			
		||||
	If Not(Get_Status(ErrCode)) then
 | 
			
		||||
		EOF = False$
 | 
			
		||||
@ -1529,24 +1529,25 @@ Service GenerateMaterialTrackRows()
 | 
			
		||||
								
 | 
			
		||||
								* Calculate Value(s) For Column(s)
 | 
			
		||||
								
 | 
			
		||||
								S.ATID			= {@ID}
 | 
			
		||||
								I.ATID			= S.ATID
 | 
			
		||||
								S.ReactNo		= {REACT_NO}
 | 
			
		||||
								I.ReactNo		= S.ReactNo
 | 
			
		||||
								S.WoNo			= {WO_NO}
 | 
			
		||||
								I.WoNo			= S.WoNo
 | 
			
		||||
								S.SubPartNo		= XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
 | 
			
		||||
								I.SubPartNo		= S.SubPartNo
 | 
			
		||||
								S.EpiPartNo		= XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
 | 
			
		||||
								I.EpiPartNo		= S.EpiPartNo
 | 
			
		||||
								S.WO_Qty		= Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
 | 
			
		||||
								I.WO_Qty		= S.WO_Qty
 | 
			
		||||
								S.WO_RX_Qty 	= Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
 | 
			
		||||
								I.WO_RX_Qty 	= S.WO_RX_Qty
 | 
			
		||||
								S.WO_UnRel_QTY	= Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
 | 
			
		||||
								I.WO_UnRel_QTY	= S.WO_UnRel_QTY
 | 
			
		||||
								S.REACT_TYPE    = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
 | 
			
		||||
								S.ProdOrdNo		= Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
 | 
			
		||||
								S.StartDtm     = {START_DTM}
 | 
			
		||||
								S.ATID         = {@ID}
 | 
			
		||||
								I.ATID         = S.ATID
 | 
			
		||||
								S.ReactNo      = {REACT_NO}
 | 
			
		||||
								I.ReactNo      = S.ReactNo
 | 
			
		||||
								S.WoNo         = {WO_NO}
 | 
			
		||||
								I.WoNo         = S.WoNo
 | 
			
		||||
								S.SubPartNo    = XLATE('WO_LOG', S.WoNo, 'ORD_SUB_PART_NO', 'X')
 | 
			
		||||
								I.SubPartNo    = S.SubPartNo
 | 
			
		||||
								S.EpiPartNo    = XLATE('WO_LOG', S.WoNo, WO_LOG_EPI_PART_NO$, 'X')
 | 
			
		||||
								I.EpiPartNo    = S.EpiPartNo
 | 
			
		||||
								S.WO_Qty       = Xlate('WO_LOG', {WO_NO}, WO_LOG_WO_QTY$, 'X')
 | 
			
		||||
								I.WO_Qty       = S.WO_Qty
 | 
			
		||||
								S.WO_RX_Qty    = Xlate('WO_LOG', {WO_NO}, 'RX_QTY', 'X')
 | 
			
		||||
								I.WO_RX_Qty    = S.WO_RX_Qty
 | 
			
		||||
								S.WO_UnRel_QTY = Xlate('WO_LOG', {WO_NO}, 'UNREL_QTY', 'X')
 | 
			
		||||
								I.WO_UnRel_QTY = S.WO_UnRel_QTY
 | 
			
		||||
								S.REACT_TYPE   = Xlate('WO_LOG', {WO_NO}, 'REACT_TYPE', 'X')
 | 
			
		||||
								S.ProdOrdNo    = Xlate('WO_LOG', {WO_NO}, 'PROD_ORD_NO', 'X')
 | 
			
		||||
								
 | 
			
		||||
								Locate 'SR*KTR]' in LocationFilter using @VM setting vPos then
 | 
			
		||||
									KitData = Location_Services('GetLocationCassInfo', S.WONo, 'SR*KTR]')
 | 
			
		||||
@ -1737,6 +1738,7 @@ Service GenerateMaterialTrackRows()
 | 
			
		||||
								AllReportData<RowIndex, 13> = KitCassList  ; // Skip field 14, it is populated by users
 | 
			
		||||
								AllReportData<RowIndex, 15> = PTICassList
 | 
			
		||||
								AllReportData<RowIndex, 16> = LoadedCassList ; // Skip field 17, it is populated by users
 | 
			
		||||
								AllReportData<RowIndex, 18> = S.StartDtm
 | 
			
		||||
						
 | 
			
		||||
							end
 | 
			
		||||
						end else
 | 
			
		||||
 | 
			
		||||
@ -79,6 +79,7 @@ Service CreateReturnToFabRecord(CassId, UserId)
 | 
			
		||||
                            Recipients         = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = UserId
 | 
			
		||||
                            SentFrom           = 'OI_ADMIN'
 | 
			
		||||
                            Subject            = 'Return To Fab Form Created'
 | 
			
		||||
@ -475,6 +476,7 @@ Service SetBinToBin(RTFId, MHUserId)
 | 
			
		||||
                                    Recipients         = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                    Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                    Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                    Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                    Recipients<1, -1>  = RTFOrigUser
 | 
			
		||||
                                    SentFrom           = 'OI_ADMIN'
 | 
			
		||||
                                    Subject            = 'Return To Fab Form Updated'
 | 
			
		||||
@ -549,6 +551,7 @@ Service SetRTFCompleted(RTFId, CompleteUserId)
 | 
			
		||||
                            Recipients         = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                            Recipients<1, -1>  = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$>
 | 
			
		||||
                            SentFrom           = 'OI_ADMIN'
 | 
			
		||||
                            Subject            = 'Return To Fab Form Completed'
 | 
			
		||||
@ -623,6 +626,7 @@ Service SetEvalInfo(RTFId, EvalUserId, ResultId)
 | 
			
		||||
                                        Recipients         = XLATE('NOTIFICATION','SHIPPING',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                        Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_ENG',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                        Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_MANUF',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                        Recipients<1, -1>  = XLATE('NOTIFICATION','RETURN_TO_FAB_GENERAL',NOTIFICATION_USER_ID$,'X')
 | 
			
		||||
                                        Recipients<1, -1>  = RTFRecord<RETURN_TO_FAB_LOTS_REQUESTOR_USER_ID$>
 | 
			
		||||
                                        SentFrom           = 'OI_ADMIN'
 | 
			
		||||
                                        Subject            = 'Return To Fab Form Updated'
 | 
			
		||||
@ -822,3 +826,4 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -45,9 +45,9 @@ $insert RDS_EQUATES
 | 
			
		||||
$insert SCAN_SETUP
 | 
			
		||||
 | 
			
		||||
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 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.
 | 
			
		||||
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.
 | 
			
		||||
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
 | 
			
		||||
    // 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.')
 | 
			
		||||
@ -72,16 +79,25 @@ Return Response OR ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API scan.POST
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'SCAN_POST'
 | 
			
		||||
	
 | 
			
		||||
    SRP_Stopwatch('Reset')
 | 
			
		||||
    SRP_Stopwatch('Start', 'SCAN_POST_RESPONSE_TIME')
 | 
			
		||||
    ScanID  = Scan_Services('CreateScansRow')
 | 
			
		||||
    If Error_Services('NoError') then
 | 
			
		||||
        StatusCode  = 201
 | 
			
		||||
        GoSub CreateHALItem
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
    end else
 | 
			
		||||
        Message = Error_Services('GetMessage')
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 500, Message)
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Stop', 'SCAN_POST_RESPONSE_TIME')
 | 
			
		||||
    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_POST_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -100,6 +116,9 @@ end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API scan.ID.POST
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'SCAN_ID_POST'
 | 
			
		||||
	
 | 
			
		||||
    SRP_Stopwatch('Reset')
 | 
			
		||||
    SRP_Stopwatch('Start', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
			
		||||
    ScanID      = EndpointSegment
 | 
			
		||||
@ -112,13 +131,20 @@ API scan.ID.POST
 | 
			
		||||
        If Error_Services('NoError') then
 | 
			
		||||
            StatusCode = 200
 | 
			
		||||
            GoSub CreateHALItem
 | 
			
		||||
            Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
        end else
 | 
			
		||||
            Message    = Error_Services('GetMessage')
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 400, Message)
 | 
			
		||||
            Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Stop', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
			
		||||
    TotalPostResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_POST_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -143,11 +169,19 @@ end api
 | 
			
		||||
 | 
			
		||||
API scan.ID.HEAD
 | 
			
		||||
API scan.ID.GET
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'SCAN_ID_GET'
 | 
			
		||||
	
 | 
			
		||||
    SRP_Stopwatch('Reset')
 | 
			
		||||
    SRP_Stopwatch('Start', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
			
		||||
    ScanID     = EndpointSegment
 | 
			
		||||
    StatusCode = 200
 | 
			
		||||
    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')
 | 
			
		||||
    TotalGetResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_GET_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -166,6 +200,9 @@ end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API scan.ID.DELETE
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
	MetricName = 'SCAN_ID_DELETE'
 | 
			
		||||
	
 | 
			
		||||
    SRP_Stopwatch('Reset')
 | 
			
		||||
    SRP_Stopwatch('Start', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
			
		||||
    ScanID  = EndpointSegment
 | 
			
		||||
@ -176,17 +213,25 @@ API scan.ID.DELETE
 | 
			
		||||
            Database_Services('DeleteDataRow', 'SCANS', ScanID, True$, False$)
 | 
			
		||||
            If Error_Services('NoError') then
 | 
			
		||||
                HTTP_Services('SetResponseStatus', 200)
 | 
			
		||||
                Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
            end else
 | 
			
		||||
                Message = Error_Services('GetMessage')
 | 
			
		||||
                HTTP_Services('SetResponseStatus', 500, Message)
 | 
			
		||||
                Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
			
		||||
            end
 | 
			
		||||
        end else
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 403, 'This scan is already accepted and cannot be deleted.')
 | 
			
		||||
            Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        Message = Error_Services('GetMessage')
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 404, Message)
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Stop', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
			
		||||
    TotalDeleteResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_DELETE_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -205,6 +250,8 @@ end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
    // 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
 | 
			
		||||
                        StatusCode  = 200
 | 
			
		||||
                        GoSub CreateHALItem
 | 
			
		||||
                        Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
                    end else
 | 
			
		||||
                        Message = Error_Services('GetMessage')
 | 
			
		||||
                        HTTP_Services('SetResponseStatus', 500, Message)
 | 
			
		||||
                        Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
			
		||||
                    end
 | 
			
		||||
                    
 | 
			
		||||
                    SRP_JSON(hBody, 'Release')               
 | 
			
		||||
                end else
 | 
			
		||||
                    HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
			
		||||
                    Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
                end
 | 
			
		||||
            end else
 | 
			
		||||
                ScanNotAcceptableReason = SRP_JSON(objResource, 'GetValue', 'scan.notAcceptableReason')
 | 
			
		||||
@ -249,11 +299,17 @@ API scan.ID.PATCH
 | 
			
		||||
        end else
 | 
			
		||||
            Message = 'Unable to parse the JSON scan resource.'
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 400, Message)
 | 
			
		||||
            Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        Message = Error_Services('GetMessage')
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 404, Message)
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Stop', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
			
		||||
    TotalPatchResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PATCH_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -272,6 +328,8 @@ end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API scan.ID.PUT
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'SCAN_ID_PUT'
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Reset')
 | 
			
		||||
    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$)
 | 
			
		||||
            If Error_Services('NoError') then
 | 
			
		||||
                GoSub CreateHALItem
 | 
			
		||||
                Mona_Services('SendStatus', MonaResource, MetricName, 'OK')
 | 
			
		||||
            end else
 | 
			
		||||
                Message = Error_Services('GetMessage')
 | 
			
		||||
                HTTP_Services('SetResponseStatus', 500, Message)
 | 
			
		||||
                Mona_Services('SendStatus', MonaResource, MetricName, 'CRITICAL')
 | 
			
		||||
            end
 | 
			
		||||
            SRP_JSON(hBody, 'Release')
 | 
			
		||||
        end else
 | 
			
		||||
            HTTP_Services('SetResponseStatus', 400, 'Unable to parse the scanData JSON.')
 | 
			
		||||
            Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
        end
 | 
			
		||||
    end else
 | 
			
		||||
        HTTP_Services('SetResponseStatus', 400, 'JSON object is missing from the request.')
 | 
			
		||||
        Mona_Services('SendStatus', MonaResource, MetricName, 'WARNING')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
    
 | 
			
		||||
    SRP_Stopwatch('Stop', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
			
		||||
    TotalPutResponseTime = SRP_Stopwatch('GetData', 'SCAN_ID_PUT_RESPONSE_TIME')
 | 
			
		||||
    LogData    = ''
 | 
			
		||||
@ -339,7 +405,6 @@ API scan.ID.PUT
 | 
			
		||||
    end
 | 
			
		||||
    LogData<6> = ResponseStatusCode
 | 
			
		||||
    Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
 | 
			
		||||
    
 | 
			
		||||
end api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -378,3 +443,4 @@ CreateHALItem:
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
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    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	GetTickCount
 | 
			
		||||
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  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\
 | 
			
		||||
 | 
			
		||||
@ -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$)
 | 
			
		||||
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
 | 
			
		||||
	Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
			
		||||
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.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service GetScansRow(ScanID, ReturnJSON)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetScansRow'
 | 
			
		||||
	
 | 
			
		||||
	ScansRow    = ''
 | 
			
		||||
	
 | 
			
		||||
@ -214,6 +224,8 @@ Service GetScansRow(ScanID, ReturnJSON)
 | 
			
		||||
	
 | 
			
		||||
	Response    = ScansRow
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
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.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service SetScansRow(ScanID, ScansRow)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'SetScansRow'
 | 
			
		||||
	
 | 
			
		||||
	If (ScanID NE '') AND (ScansRow NE '') then
 | 
			
		||||
		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.')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -242,6 +258,8 @@ end service
 | 
			
		||||
// evaluated on a case by case basis.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'ProcessScanData'
 | 
			
		||||
	
 | 
			
		||||
	If ( (ScanID NE '') AND (ScanJSON NE '') ) then
 | 
			
		||||
		hScanJSON     = ''
 | 
			
		||||
@ -335,6 +353,18 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
								Error_Services('Add', 'Inactive employee.')
 | 
			
		||||
							Case Otherwise$
 | 
			
		||||
								ScansRow<SCANS.EMPLOYEE_ID$>    = {EMPLOYEE_ID}
 | 
			
		||||
								
 | 
			
		||||
								Username = {EMPLOYEE_ID}
 | 
			
		||||
								
 | 
			
		||||
								Member = False$
 | 
			
		||||
								Groups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE'
 | 
			
		||||
								
 | 
			
		||||
								For each Group in Groups using @VM
 | 
			
		||||
									Member = MemberOf(Username, Group)
 | 
			
		||||
								Until Member EQ True$
 | 
			
		||||
								Next Group
 | 
			
		||||
								
 | 
			
		||||
								ScansRow<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$> = Member
 | 
			
		||||
						End Case                       
 | 
			
		||||
						
 | 
			
		||||
					Case ScanData[1, 3] EQ '10S'
 | 
			
		||||
@ -520,6 +550,9 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
									Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$)
 | 
			
		||||
									Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
 | 
			
		||||
									
 | 
			
		||||
									ScansRow<SCANS.OVERRIDE_REQD$> = 0
 | 
			
		||||
									ScansRow<SCANS.OVERRIDE_TYPE$> = ''
 | 
			
		||||
									ScansRow<SCANS.OVERRIDE_REASON$> = ''
 | 
			
		||||
									ScansRow<SCANS.EMPLOYEE_ID$>= ''
 | 
			
		||||
									Result = 'Override Performed successfully'
 | 
			
		||||
								end
 | 
			
		||||
@ -652,6 +685,7 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
							If (CassetteIDs NE '') then
 | 
			
		||||
								TestWaferLotData = ScansRow<SCANS.TW_LOT_ID$>
 | 
			
		||||
								Abort            = False$
 | 
			
		||||
								TestWaferLotIsValid = False$
 | 
			
		||||
								If TestWaferLotData NE '' then
 | 
			
		||||
									ThisTestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
 | 
			
		||||
									If ThisTestRunType NE '' then
 | 
			
		||||
@ -667,6 +701,8 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
															If Not(TWLotCurrOpen) then
 | 
			
		||||
																Abort = True$
 | 
			
		||||
																Scan_Services('AddNotAcceptableReason', 'Lot ':TWLot:' is closed and cannot be used at this time.')
 | 
			
		||||
															end else
 | 
			
		||||
																TestWaferLotIsValid = True$
 | 
			
		||||
															end
 | 
			
		||||
														end else
 | 
			
		||||
															Abort = True$
 | 
			
		||||
@ -1090,6 +1126,60 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
																					Case Otherwise$
 | 
			
		||||
																						// Keep error on Error_Services stack and return 400 level error.
 | 
			
		||||
																				End Case
 | 
			
		||||
																			end else
 | 
			
		||||
																				ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
 | 
			
		||||
																				ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
 | 
			
		||||
																				If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
 | 
			
		||||
																					WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
 | 
			
		||||
																					CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
 | 
			
		||||
																					WoMatKey = WO:'*':CassNo
 | 
			
		||||
																					WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
 | 
			
		||||
																					LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
 | 
			
		||||
																					LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
 | 
			
		||||
																					LastCassInWoTestWaferReqMsg = ''
 | 
			
		||||
																					If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
 | 
			
		||||
																						LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
 | 
			
		||||
																						
 | 
			
		||||
																						If LastCassInWo then
 | 
			
		||||
																							NextEventScheduled = False$
 | 
			
		||||
																							NextEventHasSamePsn = True$
 | 
			
		||||
																							NextEventIsBlock = False$
 | 
			
		||||
																							
 | 
			
		||||
																							NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
 | 
			
		||||
																							If Error_Services('NoError') then
 | 
			
		||||
																								NextEventScheduled = True$
 | 
			
		||||
																								
 | 
			
		||||
																								NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
 | 
			
		||||
																								NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
 | 
			
		||||
																							end
 | 
			
		||||
																							
 | 
			
		||||
																							If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
																								LastCassInWoTestWaferAckReq = True$
 | 
			
		||||
																								WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
 | 
			
		||||
																								TestWaferRanSinceLoad = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> or TestWaferLotIsValid EQ True$
 | 
			
		||||
									
 | 
			
		||||
																								If TestWaferLotIsValid NE True$ and TestWaferRanSinceLoad NE True$ then
 | 
			
		||||
																									TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo)
 | 
			
		||||
																									
 | 
			
		||||
																									If TestWaferRanSinceLoad NE True$ then
 | 
			
		||||
																										LastCassInWoTestWaferReqMsg = ''
 | 
			
		||||
																										If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
																											LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
 | 
			
		||||
																										end else If NextEventHasSamePsn EQ False$ then
 | 
			
		||||
																											LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
 | 
			
		||||
																										end
 | 
			
		||||
																										
 | 
			
		||||
																										Scan_Services('AddNotAcceptableReason', LastCassInWoTestWaferReqMsg)
 | 
			
		||||
																									end
 | 
			
		||||
																								end
 | 
			
		||||
																								
 | 
			
		||||
																								WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_RAN$> = TestWaferRanSinceLoad
 | 
			
		||||
																								
 | 
			
		||||
																								Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
 | 
			
		||||
																							end
 | 
			
		||||
																						end
 | 
			
		||||
																					end
 | 
			
		||||
																				end
 | 
			
		||||
																			end
 | 
			
		||||
																		end else
 | 
			
		||||
																			ScanMsg = 'The POST stage engineering instructions must be acknowledged before the load operation can be signed.'
 | 
			
		||||
@ -1215,6 +1305,8 @@ Service ProcessScanData(ScanID, ScanJSON)
 | 
			
		||||
		Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1223,6 +1315,9 @@ end service
 | 
			
		||||
//
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service AcceptScan(ScanID, ScanJSON)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'AcceptScan'
 | 
			
		||||
	
 | 
			
		||||
	If ( (ScanID NE '') and (ScanJSON NE '') ) then
 | 
			
		||||
		hBody         = ''
 | 
			
		||||
		ParseResponse = SRP_JSON(hBody, 'PARSE', ScanJSON)
 | 
			
		||||
@ -1403,6 +1498,7 @@ Service AcceptScan(ScanID, ScanJSON)
 | 
			
		||||
									LogData<3> = Username
 | 
			
		||||
									LogData<4> = CurrStage
 | 
			
		||||
									LogData<5> = ScanID
 | 
			
		||||
									
 | 
			
		||||
									Begin Case                          
 | 
			
		||||
										Case CurrStage _EQC 'VER'
 | 
			
		||||
											Action = 'LOAD'
 | 
			
		||||
@ -1493,14 +1589,32 @@ Service AcceptScan(ScanID, ScanJSON)
 | 
			
		||||
											
 | 
			
		||||
										Case CurrStage _EQC 'UNLOAD'
 | 
			
		||||
											Action = 'UNLOAD'
 | 
			
		||||
											// Check if UNLOAD stage is ready to sign
 | 
			
		||||
											UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
 | 
			
		||||
											If UnloadStageSigned EQ True$ then
 | 
			
		||||
												Result = '(':CassetteID:') Unload stage signed.'
 | 
			
		||||
											Continue = True$
 | 
			
		||||
											If TestWaferLots NE '' then
 | 
			
		||||
												ToolID           = ScansRow<SCANS.TOOL_ID$>
 | 
			
		||||
												Reactor          = ToolID[-1, 'BR']
 | 
			
		||||
												Username         = ScansRow<SCANS.EMPLOYEE_ID$>
 | 
			
		||||
												TestWaferLotQtys = ScansRow<SCANS.TW_LOT_QTY$>
 | 
			
		||||
												TestRunType = ScansRow<SCANS.TEST_RUN_TYPE_ID$>
 | 
			
		||||
												PSNo             = Xlate('RDS', RDSNo, RDS_PROD_SPEC_ID$, True$, 'X')
 | 
			
		||||
												NewTestRunId     = Test_Run_Services('CreateTestRunRecord', TestRunType, 'R', Reactor, PSNo, RDSNo,Username ,  TestWaferLots, TestWaferLotQtys)
 | 
			
		||||
												If Error_Services('HasError') then
 | 
			
		||||
													ErrorMessage = Error_Services('GetMessage')
 | 
			
		||||
													Error_Services('Set', ErrorMessage)
 | 
			
		||||
													Continue = False$
 | 
			
		||||
												end
 | 
			
		||||
											end	
 | 
			
		||||
											
 | 
			
		||||
											If Continue EQ True$ then
 | 
			
		||||
												// Check if UNLOAD stage is ready to sign
 | 
			
		||||
												UnloadStageSigned = QA_Services('SignUnloadStage', RDSNo, Username, 1)
 | 
			
		||||
												If UnloadStageSigned EQ True$ then
 | 
			
		||||
													Result = '(':CassetteID:') Unload stage signed.'
 | 
			
		||||
												end
 | 
			
		||||
												LogData<6> = Action
 | 
			
		||||
												LogData<7> = Result
 | 
			
		||||
												Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
 | 
			
		||||
											end
 | 
			
		||||
											LogData<6> = Action
 | 
			
		||||
											LogData<7> = Result
 | 
			
		||||
											Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
 | 
			
		||||
										Case CurrStage _EQC 'COMP'
 | 
			
		||||
											Action = 'COMP'
 | 
			
		||||
											Error_Services('Set', '(':CassetteID:") Cassette has already been FQA'd.")
 | 
			
		||||
@ -1558,6 +1672,8 @@ Service AcceptScan(ScanID, ScanJSON)
 | 
			
		||||
		Error_Services('Add', 'ScanID or ScanJSON argument was missing in the ' : Service : ' service.')
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -1568,6 +1684,8 @@ end service
 | 
			
		||||
// HAL+JSON properties will be added to the JSON object.
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'ConvertMVScanToJSON'
 | 
			
		||||
	
 | 
			
		||||
	jsonScan    = ''
 | 
			
		||||
	
 | 
			
		||||
@ -1674,6 +1792,7 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
			
		||||
					SRP_JSON(objEmployee, 'SetValue', 'authorized', {EMPLOYEE_AUTHORIZED}, 'Boolean')
 | 
			
		||||
					SRP_JSON(objEmployee, 'SetValue', 'notAuthorizedReason', {EMPLOYEE_NOT_AUTHORIZED_REASON}, 'String')
 | 
			
		||||
					SRP_JSON(objEmployee, 'SetValue', 'authenticated'       , @Record<SCANS.AUTHENTICATED$>            , 'Boolean');//JRO Change
 | 
			
		||||
					SRP_JSON(objEmployee, 'SetValue', 'isAuthorizedToOverrideROTR', @Record<SCANS.IS_AUTHORIZED_TO_OVERRIDE_ROTR$>, 'Boolean')
 | 
			
		||||
					SRP_JSON(objJSONScan, 'Set', 'employee', objEmployee)
 | 
			
		||||
					SRP_JSON(objEmployee, 'Release')
 | 
			
		||||
					
 | 
			
		||||
@ -1787,52 +1906,6 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
			
		||||
								end else
 | 
			
		||||
									SupplUnloadInstAckReq = False$
 | 
			
		||||
								end
 | 
			
		||||
								
 | 
			
		||||
								ReactorNo = Xlate('RDS', RDSNo, RDS_REACTOR$, 'X')
 | 
			
		||||
								ReactorType = Xlate('REACTOR', ReactorNo, REACTOR_REACT_TYPE$, 'X')
 | 
			
		||||
								If Len(ReactorType) GE 3 and ReactorType[1, 3] _EQC 'HTR' then
 | 
			
		||||
									WO = Xlate('RDS', RDSNo, RDS_WO$, 'X')
 | 
			
		||||
									CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
 | 
			
		||||
									WoMatKey = WO:'*':CassNo
 | 
			
		||||
									WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
 | 
			
		||||
									LastCassInWoTestWaferAckReq = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$>
 | 
			
		||||
									LastCassInWoTestWaferAcked = WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$>
 | 
			
		||||
									LastCassInWoTestWaferReqMsg = ''
 | 
			
		||||
									If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then
 | 
			
		||||
										LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey)
 | 
			
		||||
										
 | 
			
		||||
										If LastCassInWo then
 | 
			
		||||
											NextEventScheduled = False$
 | 
			
		||||
											NextEventHasSamePsn = True$
 | 
			
		||||
											NextEventIsBlock = False$
 | 
			
		||||
											
 | 
			
		||||
											NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo)
 | 
			
		||||
											If Error_Services('NoError') then
 | 
			
		||||
												NextEventScheduled = True$
 | 
			
		||||
												
 | 
			
		||||
												NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo)
 | 
			
		||||
												NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo)
 | 
			
		||||
											end
 | 
			
		||||
											
 | 
			
		||||
											If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
												LastCassInWoTestWaferAckReq = True$
 | 
			
		||||
												WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACK_REQ$> = LastCassInWoTestWaferAckReq
 | 
			
		||||
												WoMatRec<WO_MAT_LAST_CASSETTE_TEST_WAFER_ACKED$> = LastCassInWoTestWaferAcked
 | 
			
		||||
												Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$)
 | 
			
		||||
												
 | 
			
		||||
												LastCassInWoTestWaferReqMsg = ''
 | 
			
		||||
												If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then
 | 
			
		||||
													LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.'
 | 
			
		||||
												end else If NextEventHasSamePsn EQ False$ then
 | 
			
		||||
													LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.'
 | 
			
		||||
												end
 | 
			
		||||
											end
 | 
			
		||||
										end
 | 
			
		||||
									end
 | 
			
		||||
									SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReq', LastCassInWoTestWaferAckReq, 'Boolean')
 | 
			
		||||
									SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAcked', LastCassInWoTestWaferAcked, 'Boolean')
 | 
			
		||||
									SRP_JSON(objRDS, 'SetValue', 'lastCassInWoTestWaferAckReqMsg', LastCassInWoTestWaferReqMsg, 'String')
 | 
			
		||||
								end
 | 
			
		||||
							end else
 | 
			
		||||
								SupplUnloadInstAckReq = False$
 | 
			
		||||
							end
 | 
			
		||||
@ -2114,6 +2187,8 @@ Service ConvertMVScanToJSON(ScanID, mvScan, itemURL)
 | 
			
		||||
	
 | 
			
		||||
	Response    = jsonScan
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -2350,8 +2425,3 @@ ClearCursors:
 | 
			
		||||
	
 | 
			
		||||
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  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    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	SRP_Time, Lsl_Users_Services
 | 
			
		||||
Declare function	SRP_Time, Lsl_Users_Services, GetTickCount
 | 
			
		||||
 | 
			
		||||
Date            = Oconv(Date(), 'D4/')
 | 
			
		||||
LogFileName     = Date[7, 4] : '-' : Date[1, 2] : '-' : Date[4, 2] : ' Scheduler Log.csv'
 | 
			
		||||
Headers         = 'Logging DTM' : @FM : 'Service Step' : @FM : 'Service Notes'
 | 
			
		||||
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
 | 
			
		||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
			
		||||
end
 | 
			
		||||
@ -795,6 +803,8 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service GetCurrentEvent(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetCurrentEvent'
 | 
			
		||||
	
 | 
			
		||||
	SchedDetKey = ''
 | 
			
		||||
	If ReactNo NE '' then
 | 
			
		||||
@ -814,9 +824,14 @@ Service GetCurrentEvent(ReactNo)
 | 
			
		||||
		GoSub ClearCursors
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CurrentEventIsBlock(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CurrentEventIsBlock'
 | 
			
		||||
	
 | 
			
		||||
	If ReactNo NE '' then
 | 
			
		||||
		CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
			
		||||
				
 | 
			
		||||
@ -838,9 +853,15 @@ Service CurrentEventIsBlock(ReactNo)
 | 
			
		||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
			
		||||
		Error_Services('Add', ErrorMsg)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetNextEvent(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetNextEvent'
 | 
			
		||||
	
 | 
			
		||||
	SchedDetKey = ''
 | 
			
		||||
	If ReactNo NE '' then
 | 
			
		||||
		CurrDTM  = Datetime()
 | 
			
		||||
@ -870,6 +891,9 @@ Service GetNextEvent(ReactNo)
 | 
			
		||||
		end
 | 
			
		||||
		GoSub ClearCursors
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetEngagedEvent(ReactNo)
 | 
			
		||||
@ -919,6 +943,9 @@ Service GetLastEngagedEvent(ReactNo)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service NextEventIsSamePsn(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'NextEventIsSamePsn'
 | 
			
		||||
	
 | 
			
		||||
	Response = False$
 | 
			
		||||
	If ReactNo NE '' then
 | 
			
		||||
		CurrentSchedDetKey = Schedule_Services('GetCurrentEvent', ReactNo)
 | 
			
		||||
@ -962,9 +989,15 @@ Service NextEventIsSamePsn(ReactNo)
 | 
			
		||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
			
		||||
		Error_Services('Add', ErrorMsg)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service NextEventIsBlock(ReactNo)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'NextEventIsBlock'
 | 
			
		||||
	
 | 
			
		||||
	If ReactNo NE '' then
 | 
			
		||||
		NextSchedDetKey = Schedule_Services('GetNextEvent', ReactNo)
 | 
			
		||||
				
 | 
			
		||||
@ -986,6 +1019,9 @@ Service NextEventIsBlock(ReactNo)
 | 
			
		||||
		ErrorMsg = 'Error in service ':Service:' module. Invalid reactor number.'
 | 
			
		||||
		Error_Services('Add', ErrorMsg)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
@ -3561,3 +3597,4 @@ CreateScheduleChangeNotification:
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ Subroutine Service_Manager_Debugger_Intercept(Void)
 | 
			
		||||
 | 
			
		||||
    History     :   (Date, Initials, Notes)
 | 
			
		||||
        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 RTI_DEBUG_COMMON
 | 
			
		||||
$insert ENVIRON_CONSTANTS
 | 
			
		||||
 | 
			
		||||
Declare function   Environment_Services, Logging_Services
 | 
			
		||||
Declare subroutine Logging_Services
 | 
			
		||||
Declare function   Environment_Services, Logging_Services, Environment_Services, GetCommandLine, Datetime
 | 
			
		||||
Declare subroutine Logging_Services, obj_Notes, Set_Env
 | 
			
		||||
 | 
			
		||||
LogPath     = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
LogTime     = Oconv(Time(), 'MTS')
 | 
			
		||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
 | 
			
		||||
Headers     = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM : 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
 | 
			
		||||
objLog      = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
			
		||||
LogData     = ''
 | 
			
		||||
LogData<1>  = SPStatus@
 | 
			
		||||
LogData<2>  = SPStatCode@
 | 
			
		||||
LogData<3>  = Curr_Program@
 | 
			
		||||
LogData<4>  = CallDepth@
 | 
			
		||||
LogData<5>  = LineNo@
 | 
			
		||||
LogData<6>  = CallStack@
 | 
			
		||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, '', '', '')
 | 
			
		||||
Main:
 | 
			
		||||
	
 | 
			
		||||
	// Log event in .\LogFiles\ServiceManager\<Date> OEngine Log.csv
 | 
			
		||||
	LogPath      = Environment_Services('GetApplicationRootPath') : '\LogFiles\ServiceManager'
 | 
			
		||||
	LogDate      = Oconv(Date(), 'D4/')
 | 
			
		||||
	LogTime      = Oconv(Time(), 'MTS')
 | 
			
		||||
	LogFileName  = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' OEngine Log.csv'
 | 
			
		||||
	Headers      = 'Stored Proc Status' : @FM : 'Stored Proc Status Code' : @FM : 'Current Program' : @FM
 | 
			
		||||
	Headers     := 'Call Depth' : @FM : 'Line No' : @FM : 'Call Stack'
 | 
			
		||||
	objLog       = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ',', Headers, '', False$, False$)
 | 
			
		||||
	LogData      = ''
 | 
			
		||||
	LogData<1>   = spStatus@
 | 
			
		||||
	LogData<2>   = spStatCode@
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -27,19 +27,30 @@ Function Service_Services(@Service, @Params)
 | 
			
		||||
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
$insert LOGICAL
 | 
			
		||||
$insert SERVICE_SETUP
 | 
			
		||||
$insert SERVICES_EQUATES
 | 
			
		||||
$insert RLIST_EQUATES
 | 
			
		||||
$insert SQL_REQUESTS_EQUATES
 | 
			
		||||
$Insert APP_INSERTS
 | 
			
		||||
$Insert SERVICE_SETUP
 | 
			
		||||
$Insert SERVICES_EQUATES
 | 
			
		||||
$Insert RLIST_EQUATES
 | 
			
		||||
$Insert SQL_REQUESTS_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@
 | 
			
		||||
 | 
			
		||||
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  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
 | 
			
		||||
    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$
 | 
			
		||||
        Until EOF or Done
 | 
			
		||||
            Lock hProcQueue, RequestKeyID then
 | 
			
		||||
            	Done       = True$
 | 
			
		||||
            	DeleteRequest = True$
 | 
			
		||||
            	Server        = Environment_Services('GetServer')
 | 
			
		||||
            	Done          = True$
 | 
			
		||||
                Database_Services('GetKeyIDLock', 'PROC_QUEUE', RequestKeyId)          
 | 
			
		||||
                RequestRow = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
 | 
			
		||||
                RequestRow    = Database_Services('ReadDataRow', 'PROC_QUEUE', RequestKeyID)
 | 
			
		||||
                If RequestRow NE '' then                   
 | 
			
		||||
                    Procedure = RequestRow<PROC_QUEUE.PROC_NAME$>
 | 
			
		||||
                    Procedure = UCase(Procedure)
 | 
			
		||||
                    Params    = RequestRow<PROC_QUEUE.PARAMS$>
 | 
			
		||||
                    If Procedure NE '' then
 | 
			
		||||
                        Dim ProcParams(11)
 | 
			
		||||
                        Dim ProcParams(12)
 | 
			
		||||
                        For each Param in Params using @VM setting pPos
 | 
			
		||||
                            ProcParams(pPos) = Param
 | 
			
		||||
                        Next Param
 | 
			
		||||
                        NumArguments = DCount(Params, @VM)
 | 
			
		||||
                        
 | 
			
		||||
                        Begin Case
 | 
			
		||||
                            Case NumArguments EQ 0  ; Call @Procedure()
 | 
			
		||||
                            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.')
 | 
			
		||||
                        End Case
 | 
			
		||||
                    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
 | 
			
		||||
							// Notify OI_SYSADMIN group
 | 
			
		||||
							Recipients                           = ''
 | 
			
		||||
							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
 | 
			
		||||
						LogData<6> = 'Failed'
 | 
			
		||||
						LogData<7> = 'Error_Services error message: ':ErrorMessage:' Get_Status error code: ':ErrCode
 | 
			
		||||
					end else
 | 
			
		||||
						RequestRow<PROC_QUEUE.LAST_ATTEMPT_DTM$> = DateTime()
 | 
			
		||||
						RequestRow<PROC_QUEUE.ERROR$>            = Error_Services('GetMessage')
 | 
			
		||||
						Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$) ; // This call will release the lock
 | 
			
		||||
						LogData<6> = 'Success'
 | 
			
		||||
					end
 | 
			
		||||
                end else
 | 
			
		||||
                	// Empty request, so delete it from the queue
 | 
			
		||||
                	Database_Services('DeleteDataRow', 'PROC_QUEUE', RequestKeyId, True$, False$) ; // This call will release the lock
 | 
			
		||||
					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
 | 
			
		||||
        Repeat
 | 
			
		||||
    end
 | 
			
		||||
@ -217,36 +273,32 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
 | 
			
		||||
    If Critical EQ '' then Critical = True$
 | 
			
		||||
    PostToQueue = True$
 | 
			
		||||
    If (ProcedureName NE '') then
 | 
			
		||||
    	If (Params NE '') then
 | 
			
		||||
    		If Not(Critical) then
 | 
			
		||||
    			// Check if there is already a matching request in the queue before posting another one.
 | 
			
		||||
				Query = 'PROC_NAME':@VM:ProcedureName:@FM
 | 
			
		||||
				Query := 'PARAMS':@VM:Params:@FM
 | 
			
		||||
				Open 'DICT.PROC_QUEUE' to hDict then
 | 
			
		||||
					Keys   = ''
 | 
			
		||||
					Option = 'E'
 | 
			
		||||
					Flag   = ''
 | 
			
		||||
					Btree.Extract(Query, 'PROC_QUEUE', hDict, Keys, Option, Flag)
 | 
			
		||||
					If Flag EQ 0 then
 | 
			
		||||
						If Keys NE '' then PostToQueue = False$
 | 
			
		||||
					end else
 | 
			
		||||
						Error_Services('Add', 'Error in ':Service:' service. Error calling Btree.Extract.')
 | 
			
		||||
					end
 | 
			
		||||
		If Not(Critical) then
 | 
			
		||||
			// Check if there is already a matching request in the queue before posting another one.
 | 
			
		||||
			Query = 'PROC_NAME':@VM:ProcedureName:@FM
 | 
			
		||||
			Query := 'PARAMS':@VM:Params:@FM
 | 
			
		||||
			Open 'DICT.PROC_QUEUE' to hDict then
 | 
			
		||||
				Keys   = ''
 | 
			
		||||
				Option = 'E'
 | 
			
		||||
				Flag   = ''
 | 
			
		||||
				Btree.Extract(Query, 'PROC_QUEUE', hDict, Keys, Option, Flag)
 | 
			
		||||
				If Flag EQ 0 then
 | 
			
		||||
					If Keys NE '' then PostToQueue = False$
 | 
			
		||||
				end else
 | 
			
		||||
					Error_Services('Add', 'Error in ':Service:' service. Error opening DICT.PROC_QUEUE.')
 | 
			
		||||
					Error_Services('Add', 'Error in ':Service:' service. Error calling Btree.Extract.')
 | 
			
		||||
				end
 | 
			
		||||
			end else
 | 
			
		||||
				Error_Services('Add', 'Error in ':Service:' service. Error opening DICT.PROC_QUEUE.')
 | 
			
		||||
			end
 | 
			
		||||
			If PostToQueue then
 | 
			
		||||
				RequestKeyID                      = RTI_CreateGUID()
 | 
			
		||||
				RequestRow                        = ''
 | 
			
		||||
				RequestRow<PROC_QUEUE.PROC_NAME$> = ProcedureName
 | 
			
		||||
				RequestRow<PROC_QUEUE.PARAMS$>    = Params
 | 
			
		||||
				RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
 | 
			
		||||
				Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
 | 
			
		||||
			end
 | 
			
		||||
    	end else
 | 
			
		||||
    		Error_Services('Add', 'Error in ':Service:' service. Null Params passed in.')
 | 
			
		||||
    	end
 | 
			
		||||
		end
 | 
			
		||||
		If PostToQueue then
 | 
			
		||||
			RequestKeyID                      = RTI_CreateGUID()
 | 
			
		||||
			RequestRow                        = ''
 | 
			
		||||
			RequestRow<PROC_QUEUE.PROC_NAME$> = ProcedureName
 | 
			
		||||
			RequestRow<PROC_QUEUE.PARAMS$>    = Params
 | 
			
		||||
			RequestRow<PROC_QUEUE.ENTRY_DTM$> = Datetime()
 | 
			
		||||
			Database_Services('WriteDataRow', 'PROC_QUEUE', RequestKeyID, RequestRow, True$, False$, False$)
 | 
			
		||||
		end
 | 
			
		||||
    end else
 | 
			
		||||
        Error_Services('Add', 'Error in ':Service:' service. Null ProcedureName passed in.')
 | 
			
		||||
    end
 | 
			
		||||
@ -254,8 +306,98 @@ Service PostProcedure(ProcedureName, Params, Critical=BOOLEAN)
 | 
			
		||||
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
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 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 Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg
 | 
			
		||||
Declare subroutine Obj_Notes, Signature_Services, Obj_WO_Mat_Log, ErrMsg, Mona_Services
 | 
			
		||||
 | 
			
		||||
PSNKey     = 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
 | 
			
		||||
 | 
			
		||||
Return Response or ""
 | 
			
		||||
@ -135,6 +143,8 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetSigProfile'
 | 
			
		||||
    
 | 
			
		||||
    If UseCaching EQ '' then UseCaching = True$
 | 
			
		||||
    
 | 
			
		||||
@ -175,6 +185,8 @@ Service GetSigProfile(WOMatKey, UseCaching, RDSNo)
 | 
			
		||||
    SigDTMs = OCONV(SigDTMs,'DT4/^S')
 | 
			
		||||
    Response = SigProfile:@FM:Signatures:@FM:SigDTMs 
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -211,6 +223,9 @@ end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CheckSigOrder'
 | 
			
		||||
    
 | 
			
		||||
    If UseCaching EQ '' then UseCachine = True$
 | 
			
		||||
    Response    = False$
 | 
			
		||||
    If RDSNo NE '' then
 | 
			
		||||
@ -264,6 +279,8 @@ Service CheckSigOrder(WOMatKey, CurrStage, UseCaching, RDSNo)
 | 
			
		||||
        Response = True$
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
End Service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2010,20 +2027,17 @@ Service QASigReady(RDSNo)
 | 
			
		||||
    * Verify Unload Stage QA Metrology Tests *
 | 
			
		||||
    ******************************************
 | 
			
		||||
    If ErrorMessage EQ '' then
 | 
			
		||||
        DevelopmentFlag  = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
 | 
			
		||||
        If (DevelopmentFlag EQ True$) then
 | 
			
		||||
            WOMatQAKey = WOMatKey
 | 
			
		||||
            WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
            OutOfSpec  = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
            OutOfSpec  = Sum(OutOfSpec)
 | 
			
		||||
            If OutOfSpec GT 0 then
 | 
			
		||||
                FailReasons  = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
                ErrorMessage = 'Error in ':Service:' service. '
 | 
			
		||||
                For each FailReason in FailReasons using @VM
 | 
			
		||||
                    ErrorMessage := FailReason:' '
 | 
			
		||||
                Next FailReason
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
		WOMatQAKey = WOMatKey
 | 
			
		||||
		WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
 | 
			
		||||
		OutOfSpec  = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
 | 
			
		||||
		OutOfSpec  = Sum(OutOfSpec)
 | 
			
		||||
		If OutOfSpec GT 0 then
 | 
			
		||||
			FailReasons  = WOMatQARec<WO_MAT_QA_FAIL_REASON$>
 | 
			
		||||
			ErrorMessage = 'Error in ':Service:' service. '
 | 
			
		||||
			For each FailReason in FailReasons using @VM
 | 
			
		||||
				ErrorMessage := FailReason:' '
 | 
			
		||||
			Next FailReason
 | 
			
		||||
		end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    ************************************************************************
 | 
			
		||||
@ -2844,4 +2858,3 @@ GetMostRecentSig:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -56,9 +56,16 @@ $Insert NOTIFICATION_EQUATES
 | 
			
		||||
Equ COMMA$ to ','
 | 
			
		||||
 | 
			
		||||
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 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
 | 
			
		||||
    Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
 | 
			
		||||
@ -408,6 +415,8 @@ end service
 | 
			
		||||
//
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service AcknowledgeSupplement(SupplID, EntryUser)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'AcknowledgeSupplement'
 | 
			
		||||
    
 | 
			
		||||
    If ( (SupplID NE '') and (EntryUser NE '') ) then
 | 
			
		||||
        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.')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -447,6 +458,8 @@ end service
 | 
			
		||||
//
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'UnacknowledgedSupplementCheck'
 | 
			
		||||
    
 | 
			
		||||
    UnackList = ''
 | 
			
		||||
    Response  = False$
 | 
			
		||||
@ -482,6 +495,8 @@ Service UnacknowledgedSupplementCheck(LotType=LOTTYPES, LotID, Stage=STAGES)
 | 
			
		||||
    
 | 
			
		||||
    If UnackList NE '' then Response = UnackList
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -496,6 +511,8 @@ end service
 | 
			
		||||
//
 | 
			
		||||
//----------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
Service LogSupplementChange(SupplementRec, EditEvent, EntryUser)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'LogSupplementChange'
 | 
			
		||||
 | 
			
		||||
    If ( (SupplementRec NE '') and (EditEvent NE '') and (EntryUser NE '') ) then
 | 
			
		||||
        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.')
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -613,3 +632,4 @@ Service SendNotifications(RDSList, EditEvent, Instructions, EntryUser)
 | 
			
		||||
	
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,9 +10,10 @@ $Insert TEST_RUN_OBJ_EQUATES
 | 
			
		||||
$Insert LOT_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 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'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
@ -30,6 +31,13 @@ objLogTR    = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, He
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
Return Response or ""
 | 
			
		||||
@ -280,6 +288,9 @@ Service UpdateTWProdSortOrder(TWProdKey, NewOrder)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetAllTestRunTypes()
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetAllTestRunTypes'
 | 
			
		||||
    
 | 
			
		||||
    keylist = ''
 | 
			
		||||
    rtList  = ''
 | 
			
		||||
    RList('SELECT TEST_RUN_TYPE BY RUN_TYPE', 5, '', '', '')
 | 
			
		||||
@ -297,6 +308,9 @@ Service GetAllTestRunTypes()
 | 
			
		||||
        end
 | 
			
		||||
    Next ProdKey
 | 
			
		||||
    Response = rtList
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetTestWaferLots(ShowOnlyOpenLots)
 | 
			
		||||
@ -318,6 +332,9 @@ Service GetTestWaferLots(ShowOnlyOpenLots)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLotIds, TWLotQtys)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CreateTestRunRecord'
 | 
			
		||||
    
 | 
			
		||||
    TWRunKey     = ''
 | 
			
		||||
    Response     = ''
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
@ -490,9 +507,15 @@ Service CreateTestRunRecord(RunTypeID, EqpType, EqpID, PSNo, RDSNo, UserID, TWLo
 | 
			
		||||
        Error_Services('Add', ErrorMessage)
 | 
			
		||||
        Response      = ''
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId, Username)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CreateTestRunWaferRecord'
 | 
			
		||||
    
 | 
			
		||||
    ErrorMessage = ''
 | 
			
		||||
    If TestRunID NE '' AND TWPartID NE '' then
 | 
			
		||||
        If RowExists('TEST_RUN', TestRunID) then
 | 
			
		||||
@ -537,6 +560,9 @@ Service CreateTestRunWaferRecord(TestRunID, TWPartID, TWUsageTypeID, SourceLotId
 | 
			
		||||
        Logging_Services('AppendLog', objLogTR, LogData, @FM, @VM)
 | 
			
		||||
        Error_Services('Add', 'Error creating new test run record: ' : ErrorMessage)
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service UseTWFromLot(LotId, UsageQty, Username)
 | 
			
		||||
@ -706,6 +732,9 @@ Service GetTestRunKeysByPSN(PSNo)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service GetTestRunKeysByRDS(RDSNo)
 | 
			
		||||
    StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'GetTestRunKeysByRDS'
 | 
			
		||||
    
 | 
			
		||||
    table = "TEST_RUN"
 | 
			
		||||
    Open "DICT ":table To @DICT Else
 | 
			
		||||
        Error_Services('Add', 'Error opening TEST_RUN dictionary')
 | 
			
		||||
@ -718,6 +747,9 @@ Service GetTestRunKeysByRDS(RDSNo)
 | 
			
		||||
        Btree.Extract(srch_strng, table, @DICT, keylist, option, flag)
 | 
			
		||||
        Response = keylist
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
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 RLIST_EQUATES
 | 
			
		||||
$Insert WAFER_COUNTER_EQUATES
 | 
			
		||||
$Insert TOOL_EQUATES
 | 
			
		||||
$Insert TOOL_LOG_EQUATES
 | 
			
		||||
 | 
			
		||||
Equ Tab$       to \09\
 | 
			
		||||
Equ CRLF$      to \0D0A\
 | 
			
		||||
@ -43,8 +45,9 @@ Equ next_cur$  To 1
 | 
			
		||||
Equ add_exist$ to 2
 | 
			
		||||
 | 
			
		||||
Declare subroutine  Error_Services, Database_Services, Logging_Services, Httpclient_Services, Reduce, SRP_JSON
 | 
			
		||||
Declare function    Database_Services, Environment_Services, Logging_Services, Httpclient_Services
 | 
			
		||||
Declare function    RTI_CreateGuid, SRP_JSON
 | 
			
		||||
Declare subroutine Wafer_Counter_Services, Lot_Event_Services
 | 
			
		||||
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'
 | 
			
		||||
LogDate     = Oconv(Date(), 'D4/')
 | 
			
		||||
@ -263,6 +266,8 @@ Service AddScan(LotID, ScanQty, ScanDtm, ScanTool, ScanUser, ScanLocation, Wafer
 | 
			
		||||
    Record<WAFER_COUNTER.SCAN_WAFER_MAP$> = WaferMap
 | 
			
		||||
    Database_Services('WriteDataRow', 'WAFER_COUNTER', KeyID, Record)
 | 
			
		||||
    
 | 
			
		||||
    Response = KeyId
 | 
			
		||||
    
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -393,6 +398,161 @@ Service GetWaferCounterToolID(WaferSize=WAFER_SIZES, Location=LOCATIONS)
 | 
			
		||||
    
 | 
			
		||||
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
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -405,3 +565,4 @@ ClearCursors:
 | 
			
		||||
    
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1231,19 +1231,23 @@ Service SignVoidNonEpp(WOMatKey, Username)
 | 
			
		||||
						    Service_Services('PostProcedure', 'RDS_SERVICES', 'DetachRDSFromWO':@vm:RDSNo)
 | 
			
		||||
						    If Error_Services('NoError') then
 | 
			
		||||
                                LotEventParams = ''
 | 
			
		||||
                                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,1> = 'CreateLotEvent' ; //Service Module
 | 
			
		||||
                                LotEventParams<1,2> = ''; //Legacy Lot Id, set below
 | 
			
		||||
                                LotEventParams<1,3> = DateTime(); //Datetime
 | 
			
		||||
                                LotEventParams<1,4> = 'VOID'; //Event Type
 | 
			
		||||
                                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
 | 
			
		||||
                                    LotEventParams<1,2> = RDSNo
 | 
			
		||||
                                    LotEventParams<1,3> = 'RDS'
 | 
			
		||||
                                    Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
			
		||||
                                    LotEventParams<1,9> = 'RDS'; //Legacy Lot Type
 | 
			
		||||
                                    Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
			
		||||
                                end else
 | 
			
		||||
                                    LotEventParams<1,2> = WoMatKey
 | 
			
		||||
                                    LotEventParams<1,3> = 'WO_MAT'
 | 
			
		||||
                                    Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
			
		||||
                                    LotEventParams<1,9> = 'WO_MAT'
 | 
			
		||||
                                    Service_Services('PostProcedure', 'LOT_EVENT_SERVICES', LotEventParams)
 | 
			
		||||
                                end
 | 
			
		||||
                                If Error_Services('NoError') then
 | 
			
		||||
                                    //Add inventory transaction
 | 
			
		||||
@ -1311,13 +1315,15 @@ Service SignVoidWMI(WMInKey, Username)
 | 
			
		||||
					If Error_Services('NoError') then
 | 
			
		||||
						LotEventParams = ''
 | 
			
		||||
						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,3> = 'WM_IN'
 | 
			
		||||
						Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
			
		||||
						LotEventParams<1,3> = DateTime()
 | 
			
		||||
						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
 | 
			
		||||
							//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
 | 
			
		||||
@ -1386,13 +1392,15 @@ Service SignVoidWMO(WMOutKey, Username)
 | 
			
		||||
					If Error_Services('NoError') then
 | 
			
		||||
						LotEventParams = ''
 | 
			
		||||
						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,3> = 'WM_OUT'
 | 
			
		||||
						Service_Services('PostProcedure', 'LOT_SERVICES', LotEventParams)
 | 
			
		||||
						LotEventParams<1,3> = DateTime()
 | 
			
		||||
						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
 | 
			
		||||
							//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
 | 
			
		||||
@ -1558,3 +1566,4 @@ ClearCursors:
 | 
			
		||||
return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -181,14 +181,7 @@ DoRead:
 | 
			
		||||
			
 | 
			
		||||
			Reactor    = get_property( @window, '@Reactor' )
 | 
			
		||||
			LoadedRDS  = Xlate('REACT_STATUS', Reactor, 'LOAD_RDS', 'X')
 | 
			
		||||
			LoadedRuns = ''
 | 
			
		||||
			If LoadedRDS NE '' then
 | 
			
		||||
				For each RDS in LoadedRDS using @VM setting vPos
 | 
			
		||||
					Locate RDS in AllRDS using @VM setting rPos then
 | 
			
		||||
						LoadedRuns<0, -1> = rPos
 | 
			
		||||
					end
 | 
			
		||||
				Next RDS
 | 
			
		||||
			end
 | 
			
		||||
			LoadedRuns = Xlate('RDS', LoadedRDS, 'RUN_ORDER_NUM', 'X')
 | 
			
		||||
			
 | 
			
		||||
			LoadedData = ''
 | 
			
		||||
			For each RDSNo in LoadedRDS using @VM setting vPos
 | 
			
		||||
@ -507,5 +500,3 @@ REACT_MODE:
 | 
			
		||||
	END
 | 
			
		||||
RETURN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -574,14 +574,15 @@ return
 | 
			
		||||
 | 
			
		||||
WRITE_RECORD:
 | 
			
		||||
 | 
			
		||||
    WONo          = Field(Name, '*', 1)
 | 
			
		||||
    CassNo        = Field(Name, '*', 2)
 | 
			
		||||
    WOMatKeyID    = Name
 | 
			
		||||
    WONo       = Field(Name, '*', 1)
 | 
			
		||||
    CassNo     = Field(Name, '*', 2)
 | 
			
		||||
    WOMatKeyID = Name
 | 
			
		||||
    
 | 
			
		||||
    If {REACTOR_TYPE} NE 'EPP' then
 | 
			
		||||
        If {MAKEUP_BOX} then
 | 
			
		||||
            CurrWaferCount  = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
 | 
			
		||||
            If CurrWaferCount GT 0 then
 | 
			
		||||
            CurrWaferCount = obj_WO_Mat('CurrWaferCnt', WOMatKeyID)
 | 
			
		||||
            CurrStatus     = {CURR_STATUS}
 | 
			
		||||
            If ( (CurrWaferCount GT 0) and (CurrStatus NE 'VOID') ) then
 | 
			
		||||
                // Populate MAKEUP_WAFERS table
 | 
			
		||||
                // Add/update cassette data to the MAKEUP_WAFERS table
 | 
			
		||||
                If RowExists('MAKEUP_WAFERS', WOMatKeyID) then
 | 
			
		||||
@ -600,7 +601,7 @@ WRITE_RECORD:
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.PROD_VER_NO$>        = {PROD_VER_NO}
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.CUST_PART_NO$>       = {CUST_PART_NO}
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.REACT_TYPE$>         = {REACTOR_TYPE}
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = {CURR_STATUS}
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.CURR_STATUS_STATIC$> = CurrStatus
 | 
			
		||||
                MUWfrRec<MAKEUP_WAFERS.WFR_QTY$>            = CurrWaferCount
 | 
			
		||||
                DateOut                                     = Xlate('RDS', {RDS_NO}, 'DATE_OUT', 'X')
 | 
			
		||||
                TimeOut                                     = Xlate('RDS', {RDS_NO}, 'TIME_OUT', 'X') / 86400
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,9 @@ Compile function WO_MAT_Services(@Service, @Params)
 | 
			
		||||
#pragma precomp SRP_PreCompiler
 | 
			
		||||
 | 
			
		||||
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 obj_wo_mat_log, Set_Status
 | 
			
		||||
Declare subroutine obj_wo_mat_log, Set_Status, Mona_Services
 | 
			
		||||
 | 
			
		||||
$insert LOGICAL
 | 
			
		||||
$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$)
 | 
			
		||||
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
 | 
			
		||||
	Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
 | 
			
		||||
end
 | 
			
		||||
@ -379,6 +386,9 @@ Service SyncWOMatInvActionsAndSigProfile(WOMatKey)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service CassetteIsLastInWo(WoMatKey)
 | 
			
		||||
	StartTick = GetTickCount()
 | 
			
		||||
    MetricName = 'CassetteIsLastInWo'
 | 
			
		||||
	
 | 
			
		||||
	IsLastInWo = False$
 | 
			
		||||
	
 | 
			
		||||
	If Unassigned(WoMatKey) or WoMatKey EQ '' or RowExists('WO_MAT', WoMatKey) NE True$ then
 | 
			
		||||
@ -424,6 +434,9 @@ Service CassetteIsLastInWo(WoMatKey)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	Response = IsLastInWo
 | 
			
		||||
	
 | 
			
		||||
	EndTick = GetTickCount()
 | 
			
		||||
    Mona_Services('QueueLatencyAndCountMetrics', MonaResource, MetricName, StartTick, EndTick)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
Service SetWoMatVoidFlag(WoMatKey, Username)
 | 
			
		||||
@ -473,3 +486,4 @@ Service SetWoMatVoidFlag(WoMatKey, Username)
 | 
			
		||||
end service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,5 +24,7 @@ compile insert MATERIAL_REPORT_EQUATES
 | 
			
		||||
   equ MATERIAL_REPORT.PTI_RO$       to 15
 | 
			
		||||
   equ MATERIAL_REPORT.LOAD_RO$      to 16
 | 
			
		||||
   equ MATERIAL_REPORT.COMMENTS$     to 17
 | 
			
		||||
   equ MATERIAL_REPORT.START_DTM$    to 18
 | 
			
		||||
   
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
compile insert NICA_CHECKLISTS_EQUATES
 | 
			
		||||
/*----------------------------------------
 | 
			
		||||
 Author : Table Create Insert Routine
 | 
			
		||||
 Written : 05/03/2025
 | 
			
		||||
 Written : 03/06/2025
 | 
			
		||||
 Description : Insert for Table NICA_CHECKLISTS
 | 
			
		||||
----------------------------------------*/
 | 
			
		||||
#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.REACTOR_TYPES$            to 5
 | 
			
		||||
   equ NICA_CHECKLISTS.REMOVE_IF_COMPLETE$       to 6
 | 
			
		||||
   equ NICA_CHECKLISTS.REMOVE_IF_INTRUSIVE$      to 7
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
compile insert NICA_ORDERS_EQUATES
 | 
			
		||||
/*----------------------------------------
 | 
			
		||||
 Author : Table Create Insert Routine
 | 
			
		||||
 Written : 05/12/2024
 | 
			
		||||
 Written : 28/05/2025
 | 
			
		||||
 Description : Insert for Table NICA_ORDERS
 | 
			
		||||
----------------------------------------*/
 | 
			
		||||
#ifndef __NICA_ORDERS_EQUATES__ 
 | 
			
		||||
@ -16,9 +16,8 @@ compile insert NICA_ORDERS_EQUATES
 | 
			
		||||
   equ NICA_ORDERS.ORDER_CHECKLIST_IDS$  to 7
 | 
			
		||||
   equ NICA_ORDERS.ORDER_FLOW_IDS$       to 8
 | 
			
		||||
   equ NICA_ORDERS.ORDER_RESPONSE_LEVEL$ to 9
 | 
			
		||||
   equ NICA_ORDERS.CREATED_DTM$			 to 10
 | 
			
		||||
   equ NICA_ORDERS.CLOSED_DTM$			 to 11
 | 
			
		||||
   equ NICA_ORDERS.CREATED_DTM$          to 10
 | 
			
		||||
   equ NICA_ORDERS.CLOSED_DTM$           to 11
 | 
			
		||||
   equ NICA_ORDERS.INTRUSIVE$            to 12
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,8 @@ compile insert PROC_QUEUE_EQUATES
 | 
			
		||||
   equ PROC_QUEUE.LAST_ATTEMPT_DTM$ to 3
 | 
			
		||||
   equ PROC_QUEUE.ERROR$            to 4
 | 
			
		||||
   equ PROC_QUEUE.ENTRY_DTM$        to 5
 | 
			
		||||
   equ PROC_QUEUE.NUM_ATTEMPTS$		to 6
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
@ -179,3 +179,4 @@ Equ PROD_SPEC_ANKO_MET_POCKETS$           To 166
 | 
			
		||||
Equ PROD_SPEC_ANKO_FULL_CHAR_POCKET$      To 167
 | 
			
		||||
Equ PROD_SPEC_ANKO_WAFER_SELECTION$       To 168
 | 
			
		||||
Equ PROD_SPEC_LOCKED_BY$                  To 169
 | 
			
		||||
Equ PROD_SPEC_SHOW_SPEC_INST_ON_MU_ADD$   To 170
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								LSL2/STPROCINS/PRS_STAGE_DEFECT_DEFAULTS_EQUATES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								LSL2/STPROCINS/PRS_STAGE_DEFECT_DEFAULTS_EQUATES.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
compile insert PRS_STAGE_DEFECT_DEFAULTS_EQUATES
 | 
			
		||||
/*----------------------------------------
 | 
			
		||||
 Author : Table Create Insert Routine
 | 
			
		||||
 Written : 08/05/2025
 | 
			
		||||
 Description : Insert for Table PRS_STAGE_DEFECT_DEFAULTS
 | 
			
		||||
----------------------------------------*/
 | 
			
		||||
#ifndef __PRS_STAGE_DEFECT_DEFAULTS_EQUATES__ 
 | 
			
		||||
#define __PRS_STAGE_DEFECT_DEFAULTS_EQUATES__ 
 | 
			
		||||
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_LPD$          to 1
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCHES$    to 2
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_SCRATCH_LEN$  to 3
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_PITS$         to 4
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_MOUNDS$       to 5
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_STACK_FAULTS$ to 6
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPIKES$       to 7
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_SPOTS$        to 8
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_FOV$          to 9
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_FRONT_BL_DEFECTS$   to 10
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCHES$     to 11
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_BACK_SCRATCH_LEN$   to 12
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_BACK_NODULES$       to 13
 | 
			
		||||
   equ PRS_STAGE_DEFECT_DEFAULTS_BACK_SPIKES$        to 14
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user