700 lines
41 KiB
PHP
700 lines
41 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Integracao\Ria;
|
|
|
|
use App\Exceptions\Integracao\Ria\EnvioException;
|
|
use App\Models\Integracao\Ria\DocumentoImunologicoRotina;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Services\Integracao\RiaService;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class GerenciamentoEnvioService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
$registrosAplicacao = DB::table('integracao_ria_documento_imunologico_rotina')
|
|
->select([
|
|
'integracao_ria_documento_imunologico_rotina.id AS documento_imunologico_rotina_id',
|
|
DB::raw("DATE_FORMAT(integracao_ria_documento_imunologico_rotina.data_hora_envio, '%d/%m/%Y às %H:%i') AS data_hora_envio"),
|
|
'integracao_ria_documento_imunologico_rotina.identificador_solicitante',
|
|
'integracao_ria_documento_imunologico_rotina.cns_solicitante',
|
|
'integracao_ria_documento_imunologico_rotina.identificador_documento',
|
|
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
|
DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura_nome"),
|
|
'cadastro_cidadao_usuario.nome AS usuario_nome',
|
|
'cadastro_cidadao_paciente.nome AS paciente_nome',
|
|
'imunizacao_registro_aplicacao.data_aplicacao',
|
|
DB::raw("DATE_FORMAT(imunizacao_registro_aplicacao.data_aplicacao, '%d/%m/%Y') AS data_aplicacao"),
|
|
'cadastro_vacina.nome AS vacina_nome',
|
|
'imunizacao_entrada_vacina.lote',
|
|
DB::raw("DATE_FORMAT(imunizacao_entrada_vacina.data_validade_lote, '%d/%m/%Y') AS data_validade_lote"),
|
|
'imunizacao_dose.nome AS dose_nome',
|
|
'imunizacao_grupo_atendimento.nome AS grupo_atendimento_nome',
|
|
'imunizacao_estrategia.nome AS estrategia_nome',
|
|
'imunizacao_produtor.nome AS produtor_nome',
|
|
'imunizacao_registro_aplicacao.gestante',
|
|
'imunizacao_registro_aplicacao.puerpera',
|
|
DB::raw("
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
) AS inconsistencias
|
|
"),
|
|
'integracao_ria_documento_imunologico_rotina.atualizado',
|
|
DB::raw("IF(integracao_ria_documento_imunologico_rotina.atualizado = 1
|
|
OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1, 'Substituição', 'Inicial') as tipo_envio"),
|
|
'integracao_ria_documento_imunologico_rotina.identificador_rnds as identificador_rnds',
|
|
])
|
|
->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_aplicacao.aplicador_id')
|
|
->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
|
|
->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id')
|
|
->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id')
|
|
->join('cadastro_vacina', 'cadastro_vacina.id', 'imunizacao_entrada_vacina.vacina_id')
|
|
->join('imunizacao_dose', 'imunizacao_dose.id', 'imunizacao_registro_aplicacao.dose_id')
|
|
->join('imunizacao_estrategia', 'imunizacao_estrategia.id', 'imunizacao_registro_aplicacao.estrategia_id')
|
|
->join('imunizacao_produtor', 'imunizacao_produtor.id', 'imunizacao_entrada_vacina.produtor_id')
|
|
->leftJoin('imunizacao_grupo_atendimento', 'imunizacao_grupo_atendimento.id', 'imunizacao_registro_aplicacao.grupo_atendimento_id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_unidade.id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('cadastro_usuario.id', $usuarioId)
|
|
)
|
|
->when($params->paciente_id, fn ($q, $pacienteId) => $q
|
|
->where('cadastro_paciente.id', $pacienteId)
|
|
)
|
|
->when($params->status, function($query) use ($params) {
|
|
if ($params->status === 'com_inconsistencia') {
|
|
$query->whereExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
else if ($params->status === 'sem_inconsistencia') {
|
|
$query->whereNotExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
})
|
|
->when($params->tipo_envio === 'inicial', fn ($q) => $q
|
|
->where('integracao_ria_documento_imunologico_rotina.atualizado', false)
|
|
->where('integracao_ria_documento_imunologico_rotina.tentou_substituir', false)
|
|
)
|
|
->when($params->tipo_envio === 'substituicao', fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->where('integracao_ria_documento_imunologico_rotina.atualizado', true)
|
|
->orWhere('integracao_ria_documento_imunologico_rotina.tentou_substituir', true)
|
|
)
|
|
);
|
|
|
|
$registrosAtualizacao = DB::table('integracao_ria_documento_imunologico_rotina')
|
|
->select([
|
|
'integracao_ria_documento_imunologico_rotina.id AS documento_imunologico_rotina_id',
|
|
DB::raw("DATE_FORMAT(integracao_ria_documento_imunologico_rotina.data_hora_envio, '%d/%m/%Y às %H:%i') AS data_hora_envio"),
|
|
'integracao_ria_documento_imunologico_rotina.identificador_solicitante',
|
|
'integracao_ria_documento_imunologico_rotina.cns_solicitante',
|
|
'integracao_ria_documento_imunologico_rotina.identificador_documento',
|
|
'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia',
|
|
DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura_nome"),
|
|
'cadastro_cidadao_usuario.nome AS usuario_nome',
|
|
'cadastro_cidadao_paciente.nome AS paciente_nome',
|
|
'imunizacao_registro_atualizacao.data_atualizacao',
|
|
DB::raw("DATE_FORMAT(imunizacao_registro_atualizacao.data_atualizacao, '%d/%m/%Y') AS data_atualizacao"),
|
|
'cadastro_vacina.nome AS vacina_nome',
|
|
DB::raw("NULL AS lote"),
|
|
DB::raw("NULL AS data_validade_lote"),
|
|
'imunizacao_dose.nome AS dose_nome',
|
|
'imunizacao_grupo_atendimento.nome AS grupo_atendimento_nome',
|
|
'imunizacao_estrategia.nome AS estrategia_nome',
|
|
DB::raw("NULL AS produtor_nome"),
|
|
DB::raw("FALSE AS gestante"),
|
|
DB::raw("FALSE AS puerpera"),
|
|
DB::raw("
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
) AS inconsistencias
|
|
"),
|
|
'integracao_ria_documento_imunologico_rotina.atualizado',
|
|
DB::raw("IF(integracao_ria_documento_imunologico_rotina.atualizado = 1
|
|
OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1, 'Substituição', 'Inicial') as tipo_envio"),
|
|
'integracao_ria_documento_imunologico_rotina.identificador_rnds as identificador_rnds',
|
|
])
|
|
->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_atualizacao.aplicador_id')
|
|
->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
|
|
->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id')
|
|
->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id')
|
|
->join('cadastro_vacina', 'cadastro_vacina.id', 'imunizacao_registro_atualizacao.vacina_id')
|
|
->join('imunizacao_dose', 'imunizacao_dose.id', 'imunizacao_registro_atualizacao.dose_id')
|
|
->join('imunizacao_estrategia', 'imunizacao_estrategia.id', 'imunizacao_registro_atualizacao.estrategia_id')
|
|
->leftJoin('imunizacao_grupo_atendimento', 'imunizacao_grupo_atendimento.id', 'imunizacao_registro_atualizacao.grupo_atendimento_id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_unidade.id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('cadastro_usuario.id', $usuarioId)
|
|
)
|
|
->when($params->paciente_id, fn ($q, $pacienteId) => $q
|
|
->where('cadastro_paciente.id', $pacienteId)
|
|
)
|
|
->when($params->status, function($query) use ($params) {
|
|
if ($params->status === 'com_inconsistencia') {
|
|
$query->whereExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
else if ($params->status === 'sem_inconsistencia') {
|
|
$query->whereNotExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
})
|
|
->when($params->tipo_envio === 'inicial', fn ($q) => $q
|
|
->where('integracao_ria_documento_imunologico_rotina.atualizado', false)
|
|
->where('integracao_ria_documento_imunologico_rotina.tentou_substituir', false)
|
|
)
|
|
->when($params->tipo_envio === 'substituicao', fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->where('integracao_ria_documento_imunologico_rotina.atualizado', true)
|
|
->orWhere('integracao_ria_documento_imunologico_rotina.tentou_substituir', true)
|
|
)
|
|
);
|
|
|
|
$registros = $registrosAplicacao->union($registrosAtualizacao)->get();
|
|
|
|
$registros->each(function ($registro) {
|
|
if (!is_null($registro->identificador_rnds)) {
|
|
$registro->identificador_rnds = basename(parse_url($registro->identificador_rnds, PHP_URL_PATH));
|
|
}
|
|
});
|
|
|
|
return $registros;
|
|
}
|
|
|
|
public static function create()
|
|
{
|
|
return [
|
|
'form' => [
|
|
'unidades' => [],
|
|
'infraestruturas' => [],
|
|
'usuarios' => [],
|
|
'status' => [],
|
|
'tipos_envio' => [],
|
|
],
|
|
'model' => [
|
|
'periodo' => ['start' => null, 'end' => null],
|
|
'unidade_id' => null,
|
|
'infraestrutura_id' => null,
|
|
'usuario_id' => null,
|
|
'paciente' => null,
|
|
'status' => null,
|
|
'tipo_envio' => null
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function send($request)
|
|
{
|
|
$response = null;
|
|
$inconsistencias = [];
|
|
|
|
try {
|
|
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
|
->where('sistema_id', 1)
|
|
->firstOrFail();
|
|
|
|
|
|
$documentoImunologicoRotina = DocumentoImunologicoRotina::findOrFail($request->documento_imunologico_rotina_id);
|
|
|
|
|
|
if ($documentoImunologicoRotina->alterar) {
|
|
$documentoImunologicoRotinaAlterado = DocumentoImunologicoRotinaService::getDocumentoAlterado($request->documento_imunologico_rotina_id);
|
|
|
|
if (!is_null($documentoImunologicoRotinaAlterado)) {
|
|
$parametrizacao = RiaService::getParametrizacao();
|
|
|
|
$token = RiaService::getToken($parametrizacao->senha);
|
|
|
|
$headers = [
|
|
'Authorization' => $parametrizacao->cns_solicitante,
|
|
'Content-Type' => 'application/json',
|
|
'X-Authorization-Server' => "Bearer " . $token['access_token'],
|
|
];
|
|
|
|
$documentoImunologicoRotinaAlterado->identificador_solicitante = $parametrizacao->identificador_solicitante;
|
|
$documentoImunologicoRotinaAlterado->cns_solicitante = $parametrizacao->cns_solicitante;
|
|
$documentoImunologicoRotinaAlterado->data_hora_envio = Carbon::now();
|
|
|
|
$response = RiaService::sendDocumentoImunologicoRotina($headers, $documentoImunologicoRotinaAlterado, $cliente->municipio->estado->uf);
|
|
|
|
if ($response->status() === 201) {
|
|
$documentoImunologicoRotinaAlterado->identificador_rnds = $response->header('Location') ? $response->header('Location') : null;
|
|
$documentoImunologicoRotinaAlterado->response = $response->json();
|
|
$documentoImunologicoRotinaAlterado->alterar = false;
|
|
$documentoImunologicoRotinaAlterado->atualizado = true;
|
|
|
|
DocumentoImunologicoRotinaService::update($documentoImunologicoRotinaAlterado->documento_imunologico_rotina_id, $documentoImunologicoRotinaAlterado);
|
|
}
|
|
else {
|
|
DocumentoImunologicoRotina::where('id', $documentoImunologicoRotinaAlterado->documento_imunologico_rotina_id)->update([
|
|
'tentou_substituir' => true,
|
|
]);
|
|
|
|
DocumentoImunologicoRotinaService::updateInconsistencias($documentoImunologicoRotinaAlterado->documento_imunologico_rotina_id, $response->json());
|
|
}
|
|
|
|
Log::channel('integracao-ria')->info('Comando executado com sucesso.', [
|
|
'cliente' => $cliente->link,
|
|
'origem' => 'GerenciamentoEnvioService'
|
|
]);
|
|
}
|
|
}
|
|
else {
|
|
|
|
$documentoImunologicoRotinaComInconsistencia = DocumentoImunologicoRotinaService::getDocumentoComInconsistencia($request->documento_imunologico_rotina_id);
|
|
|
|
if (!is_null($documentoImunologicoRotinaComInconsistencia)) {
|
|
$parametrizacao = RiaService::getParametrizacao();
|
|
$token = RiaService::getToken($parametrizacao->senha);
|
|
|
|
$headers = [
|
|
'Authorization' => $parametrizacao->cns_solicitante,
|
|
'Content-Type' => 'application/json',
|
|
'X-Authorization-Server' => "Bearer " . $token['access_token'],
|
|
];
|
|
|
|
$documentoImunologicoRotinaComInconsistencia->identificador_solicitante = $parametrizacao->identificador_solicitante;
|
|
$documentoImunologicoRotinaComInconsistencia->cns_solicitante = $parametrizacao->cns_solicitante;
|
|
$documentoImunologicoRotinaComInconsistencia->data_hora_envio = Carbon::now();
|
|
|
|
$response = RiaService::sendDocumentoImunologicoRotina($headers, $documentoImunologicoRotinaComInconsistencia, $cliente->municipio->estado->uf);
|
|
|
|
$documentoImunologicoRotinaComInconsistencia->identificador_rnds = $response->header('Location') ? $response->header('Location') : null;
|
|
$documentoImunologicoRotinaComInconsistencia->response = $response->json();
|
|
|
|
DocumentoImunologicoRotinaService::update($documentoImunologicoRotinaComInconsistencia->documento_imunologico_rotina_id, $documentoImunologicoRotinaComInconsistencia);
|
|
|
|
Log::channel('integracao-ria')->info('Comando executado com sucesso.', [
|
|
'cliente' => $cliente->link,
|
|
'origem' => 'GerenciamentoEnvioService'
|
|
]);
|
|
}
|
|
}
|
|
} catch (Exception $error) {
|
|
Log::channel('integracao-ria')->error('Erro ao executar o comando', [
|
|
'origem' => 'GerenciamentoEnvioService',
|
|
'erro' => $error->getMessage(),
|
|
]);
|
|
|
|
throw new EnvioException();
|
|
}
|
|
|
|
if ($response) {
|
|
$response = $response->json();
|
|
|
|
if (isset($response->issue)) {
|
|
foreach ($response->issue as $issue) {
|
|
$inconsistencias[] = ['resposta' => $issue->diagnostics];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $inconsistencias;
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
switch (request()->listar) {
|
|
case 'unidades': {
|
|
return [
|
|
'unidades' => self::getUnidades($params),
|
|
'infraestruturas' => self::getInfraestruturas($params),
|
|
'usuarios' => self::getUsuarios($params),
|
|
'status' => self::getStatus($params),
|
|
'tipos_envio' => self::getTiposEnvio($params),
|
|
];
|
|
}
|
|
case 'infraestruturas': {
|
|
return [
|
|
'infraestruturas' => self::getInfraestruturas($params),
|
|
'usuarios' => self::getUsuarios($params),
|
|
'status' => self::getStatus($params),
|
|
'tipos_envio' => self::getTiposEnvio($params),
|
|
];
|
|
}
|
|
case 'usuarios': {
|
|
return [
|
|
'usuarios' => self::getUsuarios($params),
|
|
'status' => self::getStatus($params),
|
|
'tipos_envio' => self::getTiposEnvio($params),
|
|
];
|
|
}
|
|
case 'status': {
|
|
return [
|
|
'status' => self::getStatus($params),
|
|
'tipos_envio' => self::getTiposEnvio($params),
|
|
];
|
|
}
|
|
case 'tipos_envio': {
|
|
return [
|
|
'tipos_envio' => self::getTiposEnvio($params),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function getInconsistencias($documentoImunologicoRotinaId)
|
|
{
|
|
return DB::table('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->select(['resposta'])
|
|
->where('documento_imunologico_rotina_id', $documentoImunologicoRotinaId)
|
|
->get()
|
|
->each(function($documentoImunologicoRotinaResposta) use (&$inconsistencias) {
|
|
$resposta = null;
|
|
|
|
if (preg_match("/\(([^)]+)\)\s(.+)/", $documentoImunologicoRotinaResposta->resposta, $matches)) {
|
|
$resposta = DB::table('integracao_ria_resposta')
|
|
->select(['descricao'])
|
|
->where('codigo', str_replace('EHR-', '', $matches[1]))
|
|
->first()->descricao ?? $documentoImunologicoRotinaResposta->resposta;
|
|
} else {
|
|
$resposta = $documentoImunologicoRotinaResposta->resposta;
|
|
}
|
|
|
|
$inconsistencias[] = ['resposta' => $resposta];
|
|
});
|
|
}
|
|
|
|
private static function getParams()
|
|
{
|
|
return (object) [
|
|
'periodo' => [
|
|
'start' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['end'])->setTime(23, 59, 59)
|
|
],
|
|
'unidade_id' => request()->get('unidade_id'),
|
|
'infraestrutura_id' => request()->get('infraestrutura_id'),
|
|
'usuario_id' => request()->get('usuario_id'),
|
|
'paciente_id' => request()->get('paciente_id'),
|
|
'status' => request()->get('status'),
|
|
'tipo_envio' => request()->get('tipo_envio'),
|
|
];
|
|
}
|
|
|
|
private static function getUnidades($params)
|
|
{
|
|
return DB::table('cadastro_unidade')
|
|
->select([
|
|
'cadastro_unidade.id',
|
|
'cadastro_unidade.nome_fantasia',
|
|
])
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
)
|
|
)
|
|
->orderBy('cadastro_unidade.nome_fantasia')
|
|
->get();
|
|
}
|
|
|
|
private static function getInfraestruturas($params)
|
|
{
|
|
return DB::table('cadastro_infraestrutura')
|
|
->select([
|
|
'cadastro_infraestrutura.id',
|
|
DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome"),
|
|
])
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->where('cadastro_infraestrutura.unidade_id', $params->unidade_id)
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->whereColumn('imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_infraestrutura.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_infraestrutura.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
)
|
|
)
|
|
->orderByRaw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)')
|
|
->get();
|
|
}
|
|
|
|
private static function getUsuarios($params)
|
|
{
|
|
return DB::table('cadastro_usuario')
|
|
->select([
|
|
'cadastro_usuario.id',
|
|
'cadastro_cidadao.nome',
|
|
])
|
|
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_aplicacao', 'imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_aplicacao.aplicador_id', 'cadastro_usuario.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina')
|
|
->join('imunizacao_registro_atualizacao', 'imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_atualizacao.aplicador_id', 'cadastro_usuario.id')
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
)
|
|
)
|
|
->orderBy('cadastro_cidadao.nome')
|
|
->get();
|
|
}
|
|
|
|
private static function getStatus($params)
|
|
{
|
|
return DB::table('integracao_ria_documento_imunologico_rotina')
|
|
->select([
|
|
DB::raw("
|
|
COALESCE((
|
|
SELECT 'com_inconsistencia'
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
LIMIT 1
|
|
), 'sem_inconsistencia') AS value,
|
|
COALESCE((
|
|
SELECT 'Com inconsistência'
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
LIMIT 1
|
|
), 'Sem inconsistência') AS text
|
|
"),
|
|
])
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->whereExists(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('imunizacao_registro_aplicacao')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId)
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('imunizacao_registro_atualizacao')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId)
|
|
)
|
|
)
|
|
)
|
|
->groupBy([
|
|
DB::raw("
|
|
COALESCE((
|
|
SELECT 'com_inconsistencia'
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
LIMIT 1
|
|
), 'sem_inconsistencia'),
|
|
COALESCE((
|
|
SELECT 'Com inconsistência'
|
|
FROM integracao_ria_documento_imunologico_rotina_resposta
|
|
WHERE integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id = integracao_ria_documento_imunologico_rotina.id
|
|
LIMIT 1
|
|
), 'Sem inconsistência')
|
|
")
|
|
])
|
|
->get();
|
|
}
|
|
|
|
private static function getTiposEnvio($params)
|
|
{
|
|
return DB::table('integracao_ria_documento_imunologico_rotina')
|
|
->select([
|
|
DB::raw("
|
|
(
|
|
CASE
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0
|
|
THEN 'inicial'
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1
|
|
THEN 'substituicao'
|
|
END
|
|
) AS value,
|
|
(
|
|
CASE
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0
|
|
THEN 'Inicial'
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1
|
|
THEN 'Substituição'
|
|
END
|
|
) AS text
|
|
"),
|
|
])
|
|
->whereBetween('integracao_ria_documento_imunologico_rotina.data_hora_envio', $params->periodo)
|
|
->whereExists(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('imunizacao_registro_aplicacao')
|
|
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_registro_aplicacao.entrada_vacina_id')
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_aplicacao.id', 'integracao_ria_documento_imunologico_rotina.registro_aplicacao_id')
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('imunizacao_registro_aplicacao.aplicador_id', $usuarioId)
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('imunizacao_registro_atualizacao')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->whereColumn('imunizacao_registro_atualizacao.id', 'integracao_ria_documento_imunologico_rotina.registro_atualizacao_id')
|
|
->when($params->unidade_id, fn ($q, $unidadeId) => $q
|
|
->where('cadastro_infraestrutura.unidade_id', $unidadeId)
|
|
)
|
|
->when($params->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
|
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
|
)
|
|
->when($params->usuario_id, fn ($q, $usuarioId) => $q
|
|
->where('imunizacao_registro_atualizacao.aplicador_id', $usuarioId)
|
|
)
|
|
)
|
|
)
|
|
->when($params->status, function($query) use ($params) {
|
|
if ($params->status === 'com_inconsistencia') {
|
|
$query->whereExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
else if ($params->status === 'sem_inconsistencia') {
|
|
$query->whereNotExists(fn ($q) => $q->select(DB::raw(1))
|
|
->from('integracao_ria_documento_imunologico_rotina_resposta')
|
|
->whereColumn('integracao_ria_documento_imunologico_rotina_resposta.documento_imunologico_rotina_id', 'integracao_ria_documento_imunologico_rotina.id')
|
|
);
|
|
}
|
|
})
|
|
->groupBy([
|
|
DB::raw("
|
|
(
|
|
CASE
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0
|
|
THEN 'inicial'
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1
|
|
THEN 'substituicao'
|
|
END
|
|
),
|
|
(
|
|
CASE
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 0 AND integracao_ria_documento_imunologico_rotina.tentou_substituir = 0
|
|
THEN 'Inicial'
|
|
WHEN integracao_ria_documento_imunologico_rotina.atualizado = 1 OR integracao_ria_documento_imunologico_rotina.tentou_substituir = 1
|
|
THEN 'Substituição'
|
|
END
|
|
)
|
|
")
|
|
])
|
|
->get();
|
|
}
|
|
}
|