Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
24 kB
1
Indexable
Never
USE [Merlin]
GO
/****** Object:  StoredProcedure [dbo].[ArchivoEnte_IPS]    Script Date: 29/09/2023 18:14:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- ==========================================================================================
-- Author:		Sebastian Luaces
-- Create date: ???
-- Description:	Genera el archivo para enviar al IPS
--
-- Especificacion original del formato de archivo:
-- ??? (TODO: buscarlo por favor...)
-- 
--
-- Modificado:	Daniel
-- Fecha:		2021-11-10
-- Descripcion:	Se modifica para que no incluya las liquidaciones de tipo AJC
--
-- Especificacion nueva del formato de archivo:
-- ???
-- 
/*

EXEC [dbo].[ArchivoEnte_IPS] 2021, 11, '20'

*/
ALTER PROCEDURE [dbo].[ArchivoEnte_IPS] (
    @ptliq_Anio smallint,
    @ptliq_Mes smallint,
	@pprtn_Codigo char(2) = NULL
) AS

SET NOCOUNT ON

DECLARE @ltliq_Anio smallint = @ptliq_Anio
DECLARE @ltliq_Mes smallint = @ptliq_Mes
DECLARE	@lprtn_Codigo char(2) = @pprtn_Codigo

/*
declare	@ltliq_Anio smallint = 2018
declare @ltliq_Mes smallint = 12
declare @lprtn_Codigo char(2) = '30'
declare @labo_Codigo as varchar(8) = '00060710'
*/

IF (@lprtn_Codigo = '  ')
BEGIN
	SET @lprtn_Codigo = NULL --Significa que en la interface eligio  - SIN PARTICION
END

declare @liq_AnioMes varchar(6) = convert(varchar, @ltliq_Anio) + right('00' + convert(varchar, @ltliq_Mes), 2)
declare @pali_ResumenContable as datetime = NULL
declare @gan_MinimoNoImponible as decimal(24, 4) = 15000 -- No lo se porque toma ese valor

declare @ptliq_Dia date = convert(nchar, @ltliq_Anio) + '-' + convert(nchar, @ltliq_Mes) + '-01' 

-- Verifica que esta cerrada la liquidacion
SELECT TOP 1 @pali_ResumenContable = pali_ResumenContable
FROM ParametrosLiquidacion
WHERE pali_Anio=@ltliq_Anio
	AND pali_Mes=@ltliq_Mes
	AND (prtn_Codigo = @lprtn_Codigo or @lprtn_Codigo is null)
	AND pali_GeneroHistorico > '19900101'
	AND pali_ResumenContable > '19900101'
	AND pali_ResumenContable IS NOT NULL

IF (@pali_ResumenContable IS NULL)
BEGIN
	RAISERROR('La liquidación no se encuentra cerrada', 16, 1);
	RETURN 0;
END


/************************************************************************************************************************/
/* a) Tabla DATOSEMP
1) Debe contener 1 (uno) solo registro, atento al punto 8) de este Manual
2) El Codigo de Empleador debe ser el mismo que se ingreso en DATOS DEL EMPLEADOR
3) Nombre del Empleador existente y debera poseer caracteres validos
4) Domicilio, Localidad y Codigo Postal deberan poseer caracteres validos en caso de ser informados
5) Nº CUIL : el mismo que se ingresó en DATOS DEL EMPLEADOR, de la sig. forma :
Primeras 2 posiciones deben ser 30, 33, 34, 35, 36, 37 o 38
8 posiciones siguentes numerico con valor significativo
Dígito final correcto

a2) DATOSEMP.TXT (113 Pos)
*/
SELECT 'P10308' + --1) Código Empleador Carácter 6 1 6
	CONVERT(nchar(40), 'CASINOS') + --2) Nombre Empleador Carácter 40 7 46
	CONVERT(nchar(30), 'PERU 1385') + --3) Domicilio Carácter 30 47 76
	CONVERT(nchar(20), 'TIGRE') + --4) Localidad Carácter 20 77 96
	'001648' + --5) Código Postal Carácter 6 97 102
	'30999268346' as Linea --6) Nº CUIT Carácter 11 103 113
/************************************************************************************************************************/

/************************************************************************************************************************/
/* b) Tabla AFILIADO
1) Idem punto 2) de a)
2) Tipo de Documento : 1-LE, 2-LC, 5-DNI, 6-Otros, 7-DNI Mujer, 8-DNI Varon
3) Nº de Documento : mayor ó igual a 60000
4) Nº CUIL : 1ras. 2 posiciones deben ser 20, 23, 24 o 27
8 posiciones siguientes igual al Nº Documento
Dígitos final correcto
5) Nombre de Agente con longitud mayor a 3 y sin caracteres numéricos
6) Fecha de Nacimiento existente y edad comprendida entre 18 y 89 años
7) Nacionalidad : 1 ó 2 (Argentino - Extranjero)
8) Sexo : M-Masculino ó F-Femenino
9) Estado Civil : C-Casado, S-Soltero, D-Divorciado, V-Viudo ó R-Separado
10) Estudios : 0-No Informado, 1-Primario, 2-Secundario, 3-Terciario, 4-Superior
5-Universitario ó 6-No posee Estudios

b2) AFILIADO.TXT (158 Pos)
*/
SELECT Distinct
	TL.tper_Codigo, TL.pers_Numero,
	'P10308' + --1) Código Empleador Carácter 6 1 6
	case TL.tper_Codigo
		when 1 then '5' --2) Tipo Documento Numérico 1 7 7 0
		when 2 then '2'
		when 3 then '1'
		else '8' end + 
	right(TL.pers_Numero, 8) + -- 3) Nº Documento Numérico 8 8 15 0
	right(L.labo_CUIL, 11) + --4) Nº CUIL Carácter 11 16 26 
	convert(nchar(35), rtrim(P.pers_Apellido) + ' ' + rtrim(P.pers_Nombre)) + --5) Apellido y Nombres Carácter 35 27 61
	convert(nchar(30), coalesce(rtrim(P.pers_Calle), '') + ' ' + coalesce(rtrim(P.pers_Altura), '') + ' ' + coalesce(rtrim(P.pers_piso), '') + ' ' + coalesce(rtrim(P.pers_Depto), '')) + --6) Domicilio Carácter 30 62 91
	convert(nchar(20), coalesce(P.pers_Localidad, '')) + --7) Localidad Carácter 20 92 111
	right(coalesce(P.pers_Codigopostal, '000000'), 6) + --8) Código Postal Carácter 6 112 117
	convert(nchar(10), P.pers_FechaNacimiento, 103) + --9) Fecha Nacimiento Fecha 10 118 127 (DD/MM/AAAA)
	case P.naci_Codigo when 1 then '1' else '2' end + --10) Nacionalidad Carácter 1 128 128
	case P.pers_Sexo when 'F' then 'F' else 'M' end + --11) Sexo Carácter 1 129 129
	case P.esci_Codigo 
		when 1 then 'C' --12) Estado Civil Carácter 1 130 130
		when 2 then 'S'
		when 3 then 'R'
		when 5 then 'D'
		when 4 then 'V'
		else 'S' end +

		case est.prof_Codigo 
		 when 10 then '5'
		 when 20 then '4'
		 when 30 then '3'
		 when 40 then '2'
		 when 70 then '1'
		 else '0' end + --13) Estudios Numérico 1 131 131 0
	convert(nchar(25), coalesce(prof.prof_Descripcion, '')) + -- 14) Profesión Carácter 25 132 156
	right('00' + convert(nvarchar, coalesce(fami.hijo_Cantidad, '')), 2) -- 15) Cantidad de Hijos Numérico 2 157 158 0
	as Linea 

    FROM HistoricoTotalesLiq TL
   
    INNER JOIN Laborales L ON TL.labo_Codigo = L.labo_Codigo 
    INNER JOIN Persona P ON TL.tper_Codigo = P.tper_Codigo AND TL.pers_Numero=P.pers_Numero     
    --INNER JOIN LaboralesCargos LC ON TL.labo_Codigo = LC.labo_Codigo AND TL.laca_Codigo = LC.laca_Codigo    
    --INNER JOIN TipoPersona TPE ON TPE.tper_Codigo = TL.tper_Codigo
    INNER JOIN ParametrosLiquidacion PL ON TL.tliq_Anio = PL.pali_Anio AND TL.tliq_Mes=PL.pali_Mes AND TL.tliq_Numero=PL.pali_Numero
	--INNER JOIN Profesiones PR ON P.prof_Codigo = PR.prof_Codigo
	
	LEFT JOIN (SELECT tper_Codigo, pers_Numero, min(prof_Codigo) as prof_Codigo
				FROM [EstudiosPersona] as e
				GROUP BY tper_Codigo, pers_Numero ) as est
		ON TL.tper_Codigo = est.tper_Codigo AND TL.pers_Numero = est.pers_Numero  

	LEFT JOIN [Profesiones] as prof on prof.prof_Codigo = est.prof_Codigo  

	LEFT JOIN (SELECT [labo_Codigo], count(*) as hijo_Cantidad
		FROM [Familiares]
		WHERE fare_codigo = '01'
		AND @ptliq_Dia between fami_InicioRelacion and fami_VtoRelacion
		GROUP BY [labo_Codigo] ) as Fami
		ON Fami.labo_Codigo = L.labo_Codigo

    WHERE PL.pali_ResumenContable>'19000101' --Valor constante
    AND TL.tliq_Anio = @ltliq_Anio 
    AND TL.tliq_Mes = @ltliq_Mes
	AND TL.tliq_Numero > 0 --Solo para que tome un indice IX
	AND (TL.prtn_Codigo = @lprtn_Codigo or @lprtn_Codigo is null)
	--AND TL.labo_Codigo = @labo_Codigo
    ORDER BY TL.tper_Codigo, TL.pers_Numero
/************************************************************************************************************************/

/************************************************************************************************************************/
/* c) Tabla REVISTA
1) Idem puntos 1) 2) y 3) de b)
2) Nº de Legajo existente
3) Fecha de Ingreso del Empleador existente y menor o igual al Período Liquidado
4) Fecha de baja Nula ó (menor ó igual al Período Liquidado y mayor ó igual a la
	fecha de ingreso del Empleador)
No hace mención a la columna Régimen Estatutario
5) Encuadre Previsional : 1-General, 2-Docente, 3-Insalubre, 4-Discapacitado,
	5-Artístico, 6-Concejales, 7-Legisladores Provinciales,
	8-Magistrados y Funcionarios Judiciales,
	9-Consejeros Escolares, 10-Guardavidas,
	11-Servicio Penitenciario y 12-Servicio Penitenciario Aum
6) Modalidad de Revista : P-Permanente, T-Temporario, R-Reemplazante, C-Contratado,
	H-Becario, I-Ad Honorem y X-Práctica Rentada
7) Agrupamiento : S-Servicio, O-Obrero, A-Administrativo, T-Técnico, P-Profesional,
	J-Jerárquico, R-Superior, B-Bloque Politico, D-Docente,
	C-Contratados ó N-Otros
8) Categoría de Revista existente y distinta de cero(0)
9) Categoría Funcional existente y distinta de cero. En caso de no poseer repetir la
	de Revista
10) Fecha de Posesión del Cargo existente y menor o igual al período liquidado
11) Régimen Horario : Municipios : solo existente y con valor razonable
	se admite cero para los Concejales
	Provinciales : 21, 24, 28 ,30, 35, 36, 40, 42, 44, 45 ó 48 para
	los encuadres Previsionales 1 y 3
	Cualquier valor razonable para el resto
12) Forma de Pago : M-Mensual, Q-Quincenal, J-Jornalizado ó D-Destajo
13) Nº de Cargo mayor a cero e irrepetible por Agente

FALTA LICENCIA
	Consignar si el agente tuvo algun periodo de
	licencia según la siguiente codificación:
	1: Razones Gremiales
	2: Enfermedad – con haberes al 50%
	3: Enfermedad – sin haberes
	4: Particulares – sin haberes

14) Nº de Dipregep : La Entidad DIRECCION GRAL DE ESCUELAS-DOCENTES SUBVENCIONADOS
	deberá informar el Nº correspondiente. El resto de las entidades
	deberán informar ceros(0).
15) Nº de CUE : Las Entidades DIRECCION GRAL DE CULTURA Y EDUCACION y DIRECCION GRAL
DE CULTURA Y EDUCACION-DOCENTES SUBVENCIONADOS deberán informar el Nº
	correspondiente. El resto de las entidades deberán informar ceros(0).
16) Nº CUIL : Idem punto 4) de b)
*/
SELECT Distinct 
	TL.tper_Codigo, TL.pers_Numero, 
	'P10308' + --1) Código Empleador Carácter 6 1 6
	case TL.tper_Codigo 
		when 1 then '5' --2) Tipo Documento Numérico 1 7 7 0
		when 2 then '2'
		when 3 then '1'
		else '8' end + 
	right(TL.pers_Numero, 8) + --3) Nº Documento Numérico 8 8 15 0
	right(TL.labo_Codigo, 8) + --4) Legajo Carácter 8 16 23
	convert(nchar(10), L.labo_FechaIngreso, 103) +	--5) Fecha Ingreso a la Institutción Fecha 10 24 33 (DD/MM/AAAA)
	case when L.labo_FechaEgreso < '2100-01-01' then convert(nchar(10), L.labo_FechaEgreso, 103) else  '          ' end + --6) Fecha Baja de la Institución Fecha 10 34 43 (DD/MM/AAAA)
	replicate(' ', 2) + --7) Régimen Estatutario Carácter 2 44 45
	'01' + --8) Encuadre Previsional Carácter 2 46 47 
	CASE TL.tcar_Codigo WHEN 1 THEN 'P' ELSE 'T' END + --9) Modalidad d Revista Carácter 1 48 48
	'N     ' + --10) Agrupamiento Carácter 6 49 54
	right('00000' + convert(nvarchar, TL.cate_Codigo), 5) + --11) Categoría Revista Carácter 5 55 59
	right('00000' + convert(nvarchar, coalesce(R.cate_Codigo, TL.cate_Codigo)), 5) + --12) Categoría Funcional Carácter 5 60 64
	left(CF.cafu_Descripcion + replicate(' ', 25), 25) + --13) Cargo Carácter 25 65 89
	convert(nchar(10), coalesce(LC.laca_FechaIngresoCargo, L.labo_FechaIngreso), 103) + --14) Fecha Posesión del Cargo Fecha 10 90 99 (DD/MM/AAAA)
	'30' + -- 15) Régimen Horario Numérico 2 100 101 0
	'M' + -- 16) Forma de Pago Carácter 1 102 102
	case A.moau_Codigo 
		when 9100 then '4'
		when 9120 then '2'
		when 9130 then '4'
		when 9140 then '5'
		when 9150 then '4'
		when 9160 then '1'
		when 9170 then '3'
		when 9180 then '4'
		else ' ' end  + -- 17) Licencia Carácter 1 103 103
	coalesce(convert(nchar(10), A.ause_FechaInicio, 103), replicate(' ', 10)) + -- 18) Fecha Licencia Fecha 10 104 113 (DD/MM/AAAA)
	coalesce(convert(nchar(10), A.ause_FechaFin, 103), replicate(' ', 10)) + -- 19) Fecha fin Licencia Fecha 10 114 123 (DD/MM/AAAA)
	right('00' + convert(nvarchar, convert(int, coalesce(AntigIPS.Antig, 0))), 2) + -- 20) Antiguedad Rec. IPS Numérico 2 124 125 0
	right('00' + convert(nvarchar, convert(int, coalesce(AntigOtros.Antig, 0))), 2) + -- 21) Antiguedad Rec. Otras Numérico 2 126 127 0
	replicate(' ', 1) + -- 22) Beneficio Previsional Numérico 1 128 128
	replicate(' ', 2) + --23) Caja Otorgante Carácter 2 129 130
	replicate(' ', 10) + --24) Fecha Beneficio Fecha 10 131 140 (DD/MM/AAAA)
	right(replicate('0', 4) + convert(nvarchar, TL.laca_Codigo), 4) + -- 25) Número de Cargo Númerico 4 141 144 0
	replicate('0', 11) + -- 26) Número DIPREGEP(××) Númerico 11 145 155 0
	replicate('0', 9) + -- 27) Número CUE (×××) Numérico 9 156 164 0
	right(L.labo_CUIL, 11) -- 28) Nº CUIL Carácter 11 165 175
	as Linea

    FROM HistoricoTotalesLiq TL
   
    INNER JOIN Laborales L ON TL.labo_Codigo = L.labo_Codigo
	
	INNER JOIN CargosFunciones CF ON CF.cafu_Codigo = TL.cafu_Codigo

	LEFT JOIN LaboralesCargos LC ON LC.labo_Codigo = TL.labo_Codigo
	AND @ptliq_Dia BETWEEN LC.laca_FechaIngresoCargo AND coalesce(LC.laca_FechaEgresoCargo, @ptliq_Dia)
		
	LEFT JOIN Reemplazos R ON R.labo_Codigo = TL.labo_Codigo
	AND @ptliq_Dia BETWEEN R.reem_FechaDesde AND coalesce(R.reem_FechaHasta, @ptliq_Dia)

	LEFT JOIN Ausencias A ON A.labo_Codigo = TL.labo_Codigo
	AND @ptliq_Dia BETWEEN A.ause_FechaInicio AND coalesce(A.ause_FechaFin, @ptliq_Dia)

	LEFT JOIN (	SELECT labo_Codigo, sum(liqu_Cantidad) as Antig
			FROM HistoricoLiquidaciones 
			WHERE liqu_Anio = @ltliq_Anio AND liqu_Mes=@ltliq_Mes 
			and conc_Codigo in ('01130', '01131', '01132') 
			GROUP BY labo_Codigo ) as AntigIPS ON AntigIPS.labo_Codigo = TL.labo_Codigo

	LEFT JOIN (	SELECT labo_Codigo, sum(liqu_Cantidad) as Antig
			FROM HistoricoLiquidaciones 
			WHERE liqu_Anio = @ltliq_Anio AND liqu_Mes=@ltliq_Mes 
			and conc_Codigo in ('01030', '01040')
			GROUP BY labo_Codigo ) as AntigOtros ON AntigOtros.labo_Codigo = TL.labo_Codigo

    --INNER JOIN Persona P ON TL.tper_Codigo = P.tper_Codigo AND TL.pers_Numero=P.pers_Numero     
    --INNER JOIN LaboralesCargos LC ON TL.labo_Codigo = LC.labo_Codigo AND TL.laca_Codigo = LC.laca_Codigo    
    --INNER JOIN TipoPersona TPE ON TPE.tper_Codigo = TL.tper_Codigo
    INNER JOIN ParametrosLiquidacion PL ON TL.tliq_Anio = PL.pali_Anio AND TL.tliq_Mes=PL.pali_Mes AND TL.tliq_Numero=PL.pali_Numero
	--INNER JOIN Profesiones PR ON P.prof_Codigo = PR.prof_Codigo
	
	LEFT JOIN (SELECT tper_Codigo, pers_Numero, min(prof_Codigo) as prof_Codigo
				FROM EstudiosPersona as e
				GROUP BY tper_Codigo, pers_Numero ) as est
		ON TL.tper_Codigo = est.tper_Codigo AND TL.pers_Numero = est.pers_Numero  

	LEFT JOIN [Profesiones] as prof on prof.prof_Codigo = est.prof_Codigo  

	LEFT JOIN (SELECT [labo_Codigo], count(*) as hijo_Cantidad
		FROM [Familiares]
		WHERE fare_codigo = '01'
		AND @ptliq_Dia between fami_InicioRelacion and fami_VtoRelacion
		GROUP BY [labo_Codigo] ) as Fami
		ON Fami.labo_Codigo = L.labo_Codigo

    WHERE PL.pali_ResumenContable>'19000101' --Valor constante
    AND TL.tliq_Anio = @ltliq_Anio 
    AND TL.tliq_Mes = @ltliq_Mes
	AND TL.tliq_Numero > 0 --Solo para que tome un indice IX
	AND (TL.prtn_Codigo = @lprtn_Codigo or @lprtn_Codigo is null)
	--AND TL.labo_Codigo = @labo_Codigo
    ORDER BY TL.tper_Codigo, TL.pers_Numero
/************************************************************************************************************************/

/************************************************************************************************************************/
/* d) Tabla SALARIO
1) Idem 2) de a)
2) Período Liquidado de la forma AAAA/MM y único en la Liquidación
3) Número de Liquidación existente y único en toda la tabla (VER PUNTO 10)
4) Tipo de Liquidación : N-Normal, A-Adicional ó C-Complementaria
5) Tipo de Declaración Jurada : O-Original ó R-Rectificativa
6) Nº CUIL : Idem punto 4) de b)
7) Nº de Cargo coincidente con Revista
8) Código de Concepto del Empleador existente excepto para el Tipo de Concepto LIQ
9) Tipo de Concepto : RCA-Remuneraciones Con Aportes
	RSA-Remuneraciones Sin Aportes
	AFA-Asignaciones Familiares
	DES-Otros Descuentos
	DPS-Descuentos Previsionales
	DAS-Descuentos Asistenciales IOMA exclusivamente
	LIQ-Liquido a Cobrar
10) Descripción del Concepto existente
11) Importe distinto de cero (Solo para los tipos de concepto distintos de 'LIQ')
12) Idem punto 12) de c)
13) Encuadre Previsional coincidente con Revista
14) Modalidad de Revista coincidente con Revista
*/

/*

*/


--LINEAS DE DONDE SACO SALARIO.TXT
  SELECT
		TL.tper_Codigo, 
		TL.pers_Numero,
		C.conc_Codigo, 
		
		'P10308' + -- 1) Código Empleador Carácter 6 1 6
		convert(nvarchar, TL.tliq_Anio) + '/' + right ('00' + convert(nvarchar, TL.tliq_Mes), 2) + --2) período Liquidado Carácter 7 7 13 (AAAA/MM)
		'01' + --3) Nº de Liquidación Numérico 2 14 15 0
		'N' + --4) Tipo de Liquidación Carácter 1 16 16
		'O' + --5) Tipo de Declaración Jurada Carácter 1 17 17
		right(L.labo_CUIL, 11) + --6) Nº de CUIL Carácter 11 18 28 0
		right(replicate('0', 4) + convert(nvarchar, TL.laca_Codigo), 4) + -- 7) Número de cargo Numérico 4 29 32 0
		right(replicate('0', 6) + coalesce(c.conc_CodigoIPS, '0'), 6) + -- 8) Código Concepto según IPS Carácter 6 33 38
		replicate('0', 3) + c.conc_Codigo + --9) Código Concepto según Empleador Carácter 8 39 46
		case 
			when c.conc_Tipo = 'H' then 'RCA'
			when c.conc_Tipo = 'E' then 'RSA'
			when c.conc_Tipo = 'A' then 'AFA'
			when c.conc_Tipo = 'D' then 'DES'
			when c.conc_Tipo = 'R' and c.conc_Codigo = '02100' then 'DAS'
			when c.conc_Tipo = 'R' and c.conc_Codigo = '02010' then 'DPS'
			else 'DES' end + --10) Tipo de Concepto Carácter 3 47 49
		convert(nchar(25), c.conc_DescripcionLarga) + --11) Descripción del Concepto Carácter 25 50 74
		-- adri 20210510 caso 48041 202104 pase a decimal 9,2 para la parte positiva
		case when HL.liqu_Importe < 0 
			then '-' + right(replicate('0', 9) + replace(replace(convert(nvarchar, convert(decimal(8, 2), HL.liqu_Importe)), '.', ''), '-', ''), 8)
			else right(replicate('0', 9) + replace(convert(nvarchar, convert(decimal(9, 2), HL.liqu_Importe)), '.', ''), 9) end +  -- 12) Importe (ver Forma (×)) Numérico 9 75 83 2
		right('00' + convert(nvarchar, datediff(year, L.labo_FechaIngreso, @ptliq_Dia)), 2) + --13) Años Antiguedad I.P.S Numérico 2 84 85 0		
		'00' + --14) Meses Antiguedad I.P.S Numérico 2 86 87 0
		'00' + --15) Años Antiguedad Otras Cajas Numérico 2 88 89 0
		'00' + --16) Meses Antiguedad Otras Cajas Numérico 2 90 91 0
		'00' + --17) Años Antiguedad Docente Numérico 2 92 93 0
		'00' + --18) Meses Antiguedad Docente Numérico 2 94 95 0
		'M' + --19) Forma de Pago Carácter 1 96 96
		'00' + --20) Días Inasistencia con Descuento Numérico 2 97 98 0
		'00' + --21) Días de Licencia sin Goce de Haberes Numérico 2 99 100 0
		'01' + --22) Encuadre Previsional Carácter 2 101 102
		CASE TL.tcar_Codigo WHEN 1 THEN 'P' ELSE 'T' END --9) Modalidad d Revista Carácter 1 48 48--23) Modalidad de Revista Carácter 1 103 103
		as Linea

FROM HistoricoTotalesLiq TL
INNER JOIN HistoricoLiquidaciones HL ON HL.labo_Codigo=TL.labo_Codigo
	AND HL.laca_Codigo=TL.laca_Codigo
	AND HL.liqu_Anio=TL.tliq_Anio
	AND HL.liqu_Mes=TL.tliq_Mes
	AND HL.liqu_Numero=TL.tliq_Numero
	AND HL.liqu_MesAguinaldo=TL.tliq_MesAguinaldo
	AND HL.liqu_AnioAguinaldo=TL.tliq_AnioAguinaldo
	AND HL.liqu_TipoConcepto <> 'P'
	
INNER JOIN Conceptos C ON HL.prtn_Codigo = C.prtn_Codigo AND HL.conc_Codigo = C.conc_Codigo
INNER JOIN Laborales L ON TL.labo_Codigo = L.labo_Codigo 
INNER JOIN Persona P ON L.tper_Codigo = P.tper_Codigo AND L.pers_Numero = P.pers_Numero
INNER JOIN ParametrosLiquidacion PL ON TL.tliq_Anio = PL.pali_Anio AND TL.tliq_Mes=PL.pali_Mes AND TL.tliq_Numero=PL.pali_Numero

WHERE TL.tliq_Anio = @ltliq_Anio 
    AND TL.tliq_Mes = @ltliq_Mes
	AND TL.tliq_Numero > 0 --Solo para que tome un indice IX
	AND (TL.prtn_Codigo = @lprtn_Codigo or @lprtn_Codigo is null)
	AND PL.pali_ResumenContable > '19000101'
	AND TL.tili_Codigo <> 'AJC'
	--AND TL.labo_Codigo = @labo_Codigo


UNION ALL


    SELECT distinct
		TL.tper_Codigo, 
		TL.pers_Numero,
		'ZZZZZ' as conc_Codigo, 
		
		'P10308' + -- 1) Código Empleador Carácter 6 1 6
		convert(nvarchar, TL.tliq_Anio) + '/' + right ('00' + convert(nvarchar, TL.tliq_Mes), 2) + --2) período Liquidado Carácter 7 7 13 (AAAA/MM)
		'01' + --3) Nº de Liquidación Numérico 2 14 15 0
		'N' + --4) Tipo de Liquidación Carácter 1 16 16
		'O' + --5) Tipo de Declaración Jurada Carácter 1 17 17
		right(L.labo_CUIL, 11) + --6) Nº de CUIL Carácter 11 18 28 0
		right(replicate('0', 4) + convert(nvarchar, TL.laca_Codigo), 4) + -- 7) Número de cargo Numérico 4 29 32 0
		replicate('0', 6) + -- 8) Código Concepto según IPS Carácter 6 33 38
		replicate(' ', 8) + --9) Código Concepto según Empleador Carácter 8 39 46
		'LIQ' + --10) Tipo de Concepto Carácter 3 47 49
		replicate(' ', 25) + --11) Descripción del Concepto Carácter 25 50 74
		case when HL.liqu_Importe < 0 
			then '-' + right(replicate('0', 9) + replace(replace(convert(nvarchar, convert(decimal(8, 2), HL.liqu_Importe)), '.', ''), '-', ''), 8)
			else right(replicate('0', 9) + replace(convert(nvarchar, convert(decimal(9, 2), HL.liqu_Importe)), '.', ''), 9) end +  -- 12) Importe (ver Forma (×)) Numérico 9 75 83 2
		right('00' + convert(nvarchar, datediff(year, L.labo_FechaIngreso, @ptliq_Dia)), 2) + --13) Años Antiguedad I.P.S Numérico 2 84 85 0		
		'00' + --14) Meses Antiguedad I.P.S Numérico 2 86 87 0
		'00' + --15) Años Antiguedad Otras Cajas Numérico 2 88 89 0
		'00' + --16) Meses Antiguedad Otras Cajas Numérico 2 90 91 0
		'00' + --17) Años Antiguedad Docente Numérico 2 92 93 0
		'00' + --18) Meses Antiguedad Docente Numérico 2 94 95 0
		'M' + --19) Forma de Pago Carácter 1 96 96
		'00' + --20) Días Inasistencia con Descuento Numérico 2 97 98 0
		'00' + --21) Días de Licencia sin Goce de Haberes Numérico 2 99 100 0
		'01' + --22) Encuadre Previsional Carácter 2 101 102
		CASE TL.tcar_Codigo WHEN 1 THEN 'P' ELSE 'T' END --9) Modalidad d Revista Carácter 1 48 48--23) Modalidad de Revista Carácter 1 103 103
		as Linea

FROM HistoricoTotalesLiq TL
INNER JOIN ( 
	select labo_Codigo, laca_Codigo, liqu_Anio, liqu_Mes, sum(liqu_Importe) as liqu_Importe
	from HistoricoLiquidaciones 
	where liqu_TipoConcepto <> 'P' 
	AND liqu_Anio = @ltliq_Anio
	AND liqu_Mes = @ltliq_Mes
	group by labo_Codigo, laca_Codigo, liqu_Anio, liqu_Mes ) as HL 
	ON HL.labo_Codigo=TL.labo_Codigo
	AND HL.laca_Codigo=TL.laca_Codigo
	AND HL.liqu_Anio=TL.tliq_Anio
	AND HL.liqu_Mes=TL.tliq_Mes

INNER JOIN Laborales L ON TL.labo_Codigo = L.labo_Codigo 
INNER JOIN Persona P ON L.tper_Codigo = P.tper_Codigo AND L.pers_Numero = P.pers_Numero
INNER JOIN ParametrosLiquidacion PL ON TL.tliq_Anio = PL.pali_Anio AND TL.tliq_Mes=PL.pali_Mes AND TL.tliq_Numero=PL.pali_Numero

WHERE TL.tliq_Anio = @ltliq_Anio 
    AND TL.tliq_Mes = @ltliq_Mes
	AND TL.tliq_Numero > 0 --Solo para que tome un indice IX
	AND (TL.prtn_Codigo = @lprtn_Codigo or @lprtn_Codigo is null)
	AND PL.pali_ResumenContable > '19000101'
	AND TL.tili_Codigo <> 'AJC'
	--AND TL.labo_Codigo = @labo_Codigo

ORDER BY TL.tper_Codigo, TL.pers_Numero, C.conc_Codigo 
/************************************************************************************************************************/