jrbarros81
10/11/2019 - 1:33 PM

(Regra) Certidão para Validar Responsável Técnico - CRQ-PE

/*
$funcao:Certidão para Validar Responsável Técnico$
$descricao:Certidão para Validar Responsável Técnico$
$contexto:NET.PROTOCOLOCERTIDAO$
$autor:Júnior Barros$
$data:2019-10-9$
*/
create proc sp_regra_net_certidao_responsavel_tecnico
@Retorno int OUTPUT, @Mensagem varchar(8000) OUTPUT, @IdInscricao int, @TipoDocumento int, 
@Assunto int, @EntradaDocumento bit, @CodArt int
as
set @Retorno = 0


if @EntradaDocumento = 0 and @Assunto in (900000001) begin 

----------------------- INICIO VALIDAÇÃO RT Está Inscrito -----------------------------------------
if not exists(

SELECT DISTINCT
   Entidade.Codigo AS "Empresa"
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
LEFT JOIN Entidade AS Entidade_2 ON Trabalha.[Empregador] = Entidade_2.[Codigo]

WHERE
   (
   (Situacao.Ativo = 1) AND 
   (TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Entidade.Codigo in (
   		SELECT DISTINCT
			   Entidade.Codigo AS "Empresa"
		FROM Entidade
		LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
		LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
		LEFT JOIN Trabalha AS Trabalha_1 ON Entidade_1.[Codigo] = Trabalha_1.[Empregado]
		LEFT JOIN TrabalhaTemDado ON Trabalha_1.[Codigo] = TrabalhaTemDado.[Trabalha]
		LEFT JOIN Dado ON TrabalhaTemDado.[Dado] = Dado.[Codigo]
		LEFT JOIN TipoDado ON Dado.[TipoDado] = TipoDado.[Codigo]
		WHERE
			   ((Trabalha_1.[ResponsavelTecnico] = 1) AND 
			   (Trabalha_1.[Empregado] IN(
			   
					SELECT DISTINCT
						Entidade.Codigo AS "ID da Entidade"
					FROM Entidade
					LEFT JOIN Registro ON Entidade.Codigo = 
Registro.Entidade
					LEFT JOIN Situacao ON Registro.Situacao = 
Situacao.Codigo
					WHERE ((Situacao.Inscrito = 1)))) 
	
			   )
			
			   )) AND
	(Registro.Codigo = @IdInscricao)
   )

)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois o Responsável Técnico não possui Inscrição ou 
ainda não está Ativo.'

end
----------------------- FIM VALIDAÇÃO RT Está Inscrito -----------------------------------------

----------------------- INICIO VALIDAÇÃO Débitos RT --------------------------------------
if not exists(

SELECT DISTINCT
   Entidade.Codigo AS "Empresa"
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
LEFT JOIN Entidade AS Entidade_2 ON Trabalha.[Empregador] = Entidade_2.[Codigo]

WHERE
   (
   (Situacao.Ativo = 1) AND 
   (TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Entidade.Codigo in (
   		SELECT DISTINCT
			   Entidade.Codigo AS "Empresa"
		FROM Entidade
		LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
		LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
		LEFT JOIN Trabalha AS Trabalha_1 ON Entidade_1.[Codigo] = Trabalha_1.[Empregado]
		LEFT JOIN TrabalhaTemDado ON Trabalha_1.[Codigo] = TrabalhaTemDado.[Trabalha]
		LEFT JOIN Dado ON TrabalhaTemDado.[Dado] = Dado.[Codigo]
		LEFT JOIN TipoDado ON Dado.[TipoDado] = TipoDado.[Codigo]
		WHERE
			   ((Trabalha_1.[ResponsavelTecnico] = 1) AND 
			   (Trabalha.[Empregado] NOT IN (
			   
			   		SELECT DISTINCT
					   Entidade.Codigo
					FROM Registro
					LEFT JOIN Debito ON Registro.[Codigo] = Debito.
[Registro]
					LEFT JOIN Taxa ON Debito.[Codigo] = Taxa.[Debito]
					LEFT JOIN TipoTaxa ON Taxa.[TipoTaxa] = TipoTaxa.
[Codigo]
					LEFT JOIN Entidade ON Registro.Entidade = 
Entidade.Codigo
					WHERE
					   ((((~ Debito.[DebitoConfirmado]) &~ Debito.
[DebitoCancelado] &~ (Debito.[Baixado] | Debito.[ParcelamentoLiquidado])) = 1) AND 
					   (Debito.[ParcelamentoConfirmado] = 0) AND 
					   (CAST(CASE WHEN (Debito.[Vencimento] < (cast(floor
(cast(GetDate() as float)) as datetime))) THEN 1 ELSE 0 END AS BIT) = 1) AND 
					   (TipoTaxa.[Codigo] <> 13 OR
					   TipoTaxa.[Codigo] IS NULL)) OR 
					   ((TipoTaxa.[Codigo] <> 13) AND 
					   (((~ Debito.[DebitoConfirmado]) &~ Debito.
[DebitoCancelado] &~ (Debito.[Baixado] | Debito.[ParcelamentoLiquidado])) = 1))
			   
			   ))
			   )
			
			   )) AND
	(Registro.Codigo = @IdInscricao)
   )

)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois constam débitos para o Responsável Técnico.'
end
----------------------- FIM VALIDAÇÃO Débitos RT --------------------------------------

----------------------- INICIO VALIDAÇÃO DADO ADICIONAL ANOTAÇÃO RT --------------------------------------
if not exists(

SELECT DISTINCT
   Registro.Codigo
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
WHERE
   ((TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Situacao.Ativo = 1) AND 
   (Entidade.Codigo in (
   
		SELECT DISTINCT
			Entidade.Codigo AS "Empregador"
		FROM Entidade
		LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
		LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
		LEFT JOIN TipoEntidade ON Entidade_1.[TipoEntidade] = TipoEntidade.[Codigo]
		LEFT JOIN Registro ON Entidade_1.[Codigo] = Registro.[Entidade]
		LEFT JOIN TrabalhaTemDado ON Trabalha.[Codigo] = TrabalhaTemDado.[Trabalha]
		LEFT JOIN Dado ON TrabalhaTemDado.[Dado] = Dado.[Codigo]
		LEFT JOIN TipoDado ON Dado.[TipoDado] = TipoDado.[Codigo]
		WHERE
		((Entidade_1.[Nome] IS NOT NULL) AND 
		(Trabalha.[VinculoEmpregaticio] IN (5)) AND 
		(TipoDado.[Codigo] = 10008) AND
		(Dado.[Codigo] > 0))
   
   )) AND
   (Registro.Codigo = @IdInscricao))


)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois o Responsável Técnico está sem ANOTAÇÃO RT'
end
----------------------- FIM VALIDAÇÃO DADO ADICIONAL ANOTAÇÃO RT --------------------------------------

-------------------------- INICIO VALIDAÇÃO DATA DEMISSÃO -----------------------------------
if not exists(

SELECT DISTINCT
   Entidade.Codigo AS "Empresa"
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
LEFT JOIN Entidade AS Entidade_2 ON Trabalha.[Empregador] = Entidade_2.[Codigo]

WHERE
   (
   (Situacao.Ativo = 1) AND 
   (TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Entidade.Codigo in (
   		SELECT DISTINCT
			   Entidade.Codigo AS "Empresa"
		FROM Entidade
		LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
		LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
		LEFT JOIN Trabalha AS Trabalha_1 ON Entidade_1.[Codigo] = Trabalha_1.[Empregado]
		LEFT JOIN TrabalhaTemDado ON Trabalha_1.[Codigo] = TrabalhaTemDado.[Trabalha]
		LEFT JOIN Dado ON TrabalhaTemDado.[Dado] = Dado.[Codigo]
		LEFT JOIN TipoDado ON Dado.[TipoDado] = TipoDado.[Codigo]
		WHERE
			   ((Trabalha_1.[ResponsavelTecnico] = 1) AND 
			   (Trabalha.[DataDemissao] IS NULL)
			   )
			
			   )) AND
	(Registro.Codigo = @IdInscricao)
   )

)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois o RT possui Data de Demissão'
end
-------------------------- FIM VALIDAÇÃO DATA DEMISSÃO -----------------------------------


if not exists(

SELECT DISTINCT
   Entidade.Codigo AS "Empresa"
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
LEFT JOIN Entidade AS Entidade_2 ON Trabalha.[Empregador] = Entidade_2.[Codigo]

WHERE
(
   (Situacao.Ativo = 1) AND 
   (TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Entidade.Codigo in (
   		SELECT DISTINCT
			   Entidade.Codigo AS "Empresa"
		FROM Entidade
		LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
		LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
		LEFT JOIN Trabalha AS Trabalha_1 ON Entidade_1.[Codigo] = Trabalha_1.[Empregado]
		LEFT JOIN TrabalhaTemDado ON Trabalha_1.[Codigo] = TrabalhaTemDado.[Trabalha]
		LEFT JOIN Dado ON TrabalhaTemDado.[Dado] = Dado.[Codigo]
		LEFT JOIN TipoDado ON Dado.[TipoDado] = TipoDado.[Codigo]
		WHERE
			   ((Trabalha_1.[ResponsavelTecnico] = 1) AND 
			   (Trabalha.[DataAdmissao] IS NOT NULL)
			   )
			
			   )) AND
	(Registro.Codigo = @IdInscricao)
   )

)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois o RT não possui Data de Admissão'
end
-------------------------- FIM VALIDAÇÃO DATA ADMISSAO -----------------------------------

-------------------------- INICIO VALIDAÇÃO HORARIO DO RT -----------------------------------
if not exists(

SELECT DISTINCT
   Registro.Codigo
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade
LEFT JOIN Situacao ON Registro.Situacao = Situacao.Codigo
WHERE
   ((TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Situacao.Ativo = 1) AND 
   (Entidade.Codigo in (
   
			SELECT DISTINCT
				Entidade.Codigo
			FROM Entidade
			LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
			LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.
[Codigo]
			LEFT JOIN TipoEntidade ON Entidade_1.[TipoEntidade] = TipoEntidade.
[Codigo]
			LEFT JOIN Registro ON Entidade_1.[Codigo] = Registro.[Entidade]
			WHERE
				((Trabalha.[VinculoEmpregaticio] IN (5)) AND 
				(len(Trabalha.[Horario]) > 0))


		)) AND
   (Registro.Codigo = @IdInscricao))

)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois não foi informado o horário de trabalho do 
Responsável Técnico.'

end
-------------------------- FIM VALIDAÇÃO HORARIO DO RT -----------------------------------

-------------------------- INICIO VALIDAÇÃO PROCESSO INFRACAO DO RT -----------------------------------
if exists(

SELECT DISTINCT
   Entidade.Codigo
FROM Entidade
LEFT JOIN Entidade AS Entidade_1 ON Entidade.Codigo = Entidade_1.Codigo
LEFT JOIN TipoEntidade ON Entidade_1.TipoEntidade = TipoEntidade.Codigo
LEFT JOIN Registro ON Entidade.Codigo = Registro.Entidade

WHERE
   ((Entidade.Codigo in (
   
SELECT DISTINCT
   Entidade.Codigo AS "ID da Entidade"
FROM Entidade
LEFT JOIN Trabalha ON Entidade.Codigo = Trabalha.[Empregador]
LEFT JOIN Entidade AS Entidade_1 ON Trabalha.[Empregado] = Entidade_1.[Codigo]
LEFT JOIN PessoaFisica ON Entidade_1.[Codigo] = PessoaFisica.[Entidade]
LEFT JOIN Registro ON Entidade_1.[Codigo] = Registro.[Entidade]
LEFT JOIN ProcessoInfracao ON Registro.[Codigo] = ProcessoInfracao.[Registro]
LEFT JOIN HistoricoFiscal ON ProcessoInfracao.[HistoricoFiscal] = HistoricoFiscal.[Codigo]
LEFT JOIN TipoProcessoInfracao ON ProcessoInfracao.[TipoProcessoInfracao] = TipoProcessoInfracao.
[Codigo]
WHERE
   ((Trabalha.[DataDemissao] IS NULL) AND 
   (ProcessoInfracao.[Codigo] > 0))
   
   )) AND 
   (TipoEntidade.[Pessoa Juridica] = 1) AND 
   (Registro.Codigo = @IdInscricao))
)begin
set @Retorno = 1
set @Mensagem = 'Não é possível emitir Certidão pois o Responsável Técnico possui Processo de Infração.'

end

-------------------------- FIM VALIDAÇÃO PROCESSO INFRACAO DO RT -----------------------------------

end