| 
					
				 | 
			
			
				@@ -0,0 +1,62 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-- Функция формата даты 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+create or replace function approx_report_date(t_date timestamptz) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	returns varchar(5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	language plpgsql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return lpad(extract(day from t_date)::text, 2, '0') || lpad(extract(hour from t_date)::text, 2, '0') || floor((extract(minute from t_date) / 10))::varchar; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-- Функция формата высоты 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+create or replace function approx_report_height(height numeric) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	returns varchar(4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	language plpgsql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return lpad(height::text, 4, '0'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-- Функция формата отклонения по давлению и температуре 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+create or replace function approx_report_deviation(pressure numeric, temperature numeric) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	returns varchar(5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	language plpgsql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+declare  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pressure_dev numeric; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	temperature_dev numeric; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res varchar(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pressure_dev = (pressure - (select value from numeric_constants where key = 'rel_pressure')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	temperature_dev = (temperature - (select value from numeric_constants where key = 'rel_temperature')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	temperature_dev := round(temperature_dev + calc_adjustment(calc_interpolation(temperature))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res = case when pressure_dev >= 0 then pressure_dev::text else ('5' || lpad((pressure_dev*-1)::text, 2, '0')) end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	res = concat(res, lpad(temperature_dev::text, 2, '0')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-- Тип приблизительного отчета 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CREATE TYPE approx_report AS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	date character varying(5), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	height character varying(4), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	deviation character varying(5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-- Функция получения приблизительного отчета 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+create or replace function approx_report(date timestamptz, height numeric, pressure numeric, temperature numeric) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	returns approx_report 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	language plpgsql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return (approx_report_date(date)::varchar(5), approx_report_height(height)::varchar(4), approx_report_deviation(pressure, temperature)::varchar(5)) as approx_report; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$$; 
			 |