2429 lines
107 KiB
PHP
2429 lines
107 KiB
PHP
<?php
|
|
|
|
namespace App\Services\ProntoAtendimento;
|
|
|
|
use App\Enums\Parametrizacao\Exame\Status;
|
|
use App\Enums\Parametrizacao\Exame\Tipo;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class RelatorioExameImagemService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$params = request()->all();
|
|
|
|
self::adjustPeriod($params);
|
|
|
|
if (!request()->status_id || request()->status_id == Status::REALIZADO) {
|
|
|
|
$procedimentos = DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
DB::raw('"REALIZADO" AS status_nome'),
|
|
DB::raw('COALESCE(
|
|
(SELECT e.nome
|
|
FROM parametrizacao_exame e
|
|
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
|
|
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
|
|
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
|
|
AND e.codigo = sigtap_procedimento.codigo
|
|
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
|
|
"-") AS exame_nome'
|
|
),
|
|
'pronto_atendimento_atendimento_procedimento.id as procedimento_id',
|
|
'pronto_atendimento_atendimento.id as atendimento_id',
|
|
'pronto_atendimento_atendimento_procedimento.quantidade as quantidade',
|
|
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, '%d/%m/%Y %H:%i') AS atendido_em"),
|
|
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_procedimento.created_at, '%d/%m/%Y %H:%i') AS data_atendimento"),
|
|
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
|
|
'cadastro_cidadao.nome as paciente_nome',
|
|
DB::raw("CONCAT(
|
|
SUBSTR(cadastro_cidadao.cpf, 1, 3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf, 4, 3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf, 7, 3),
|
|
'-',
|
|
SUBSTR(cadastro_cidadao.cpf, 10, 2)
|
|
) as paciente_cpf"),
|
|
DB::raw("CONCAT(cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome,', ', cadastro_endereco.numero, ' - ', cadastro_bairro.nome, ', ', cadastro_endereco.complemento, ' - ', cadastro_municipio.nome, ' - ', intranet.cadastro_estado.nome) AS paciente_endereco_completo"),
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as paciente_prontuario'),
|
|
DB::raw("
|
|
IF(
|
|
COALESCE(
|
|
pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id,
|
|
pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id
|
|
) IS NOT NULL,
|
|
'SIM',
|
|
'NÃO'
|
|
) AS encaminhado
|
|
"),
|
|
'medico_solicitante.nome as profissional_solicitante_nome',
|
|
|
|
DB::raw("CONCAT(ocupacao_medico_solicitante.codigo, ' - ', ocupacao_medico_solicitante.nome) AS ocupacao_solicitante"),
|
|
|
|
|
|
DB::raw('COALESCE(CONCAT(sigtap_procedimento.codigo, " - ", sigtap_procedimento.nome), "-") AS procedimento'),
|
|
DB::raw('COALESCE(CONCAT(sigtap_ocupacao.codigo, " - ", sigtap_ocupacao.nome), "-") AS ocupacao_executante'),
|
|
DB::raw('COALESCE(cidadao_profissional_executante.nome, "-") AS profissional_executante_nome'),
|
|
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM)
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
$query->where('exame.id', request()->exame_id);
|
|
});
|
|
});
|
|
})
|
|
->join(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->join(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_profissional_executante',
|
|
'lotacao_profissional_executante.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'lotacao_profissional_executante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'lotacao_profissional_executante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as cidadao_profissional_executante',
|
|
'cidadao_profissional_executante.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_domicilio',
|
|
'cadastro_domicilio.id',
|
|
'cadastro_cidadao.domicilio_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_endereco',
|
|
'cadastro_endereco.id',
|
|
'cadastro_domicilio.endereco_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_logradouro',
|
|
'cadastro_logradouro.id',
|
|
'cadastro_endereco.logradouro_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_logradouro_tipo',
|
|
'cadastro_logradouro_tipo.id',
|
|
'cadastro_logradouro.tipo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_bairro',
|
|
'cadastro_bairro.id',
|
|
'cadastro_logradouro.bairro_id'
|
|
)
|
|
->leftJoin(
|
|
'intranet.cadastro_municipio',
|
|
'cadastro_municipio.id',
|
|
'cadastro_logradouro.municipio_id'
|
|
)
|
|
->leftJoin(
|
|
'intranet.cadastro_estado',
|
|
'cadastro_estado.id',
|
|
'cadastro_municipio.estado_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
);
|
|
|
|
$procedimentos
|
|
->when(!is_null(request()->unidade_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_profissional_executante.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('cidadao_profissional_executante.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null($params['paciente_id'] ?? null), function ($query) use ($params) {
|
|
|
|
return $query->where('cadastro_cidadao.id', $params['paciente_id']);
|
|
})
|
|
->when(!is_null($params['prontuario'] ?? null), function ($query) use ($params) {
|
|
|
|
return $query->where('cadastro_paciente.prontuario', (int)$params['prontuario']);
|
|
})
|
|
->when(!is_null(request()->encaminhado), function ($query) {
|
|
|
|
return $query->where(function ($query) {
|
|
|
|
if (request()->encaminhado === 'true') {
|
|
$query->whereNotNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
|
|
->orWhereNotNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
|
|
} else {
|
|
$query->whereNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
|
|
->whereNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
$procedimentos = $procedimentos
|
|
->orderBy('pronto_atendimento_atendimento_recepcao.atendido_em')
|
|
->get()
|
|
->toArray();
|
|
|
|
} else {
|
|
|
|
$procedimentos = [];
|
|
}
|
|
|
|
if (!request()->status_id || request()->status_id !== Status::REALIZADO) {
|
|
|
|
$exames = DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
'pronto_atendimento_faa.id as faa_id',
|
|
DB::raw('COALESCE(parametrizacao_exame_status.nome, "REALIZADO") AS status_nome'),
|
|
'parametrizacao_exame.nome as exame_nome',
|
|
DB::raw('1 AS quantidade'),
|
|
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, '%d/%m/%Y %H:%i') AS atendido_em"),
|
|
DB::raw("DATE_FORMAT(pronto_atendimento_atendimento.created_at, '%d/%m/%Y %H:%i') AS data_atendimento"),
|
|
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
|
|
'cadastro_cidadao.nome as paciente_nome',
|
|
DB::raw("CONCAT(
|
|
SUBSTR(cadastro_cidadao.cpf, 1, 3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf, 4, 3),
|
|
'.',
|
|
SUBSTR(cadastro_cidadao.cpf, 7, 3),
|
|
'-',
|
|
SUBSTR(cadastro_cidadao.cpf, 10, 2)
|
|
) as paciente_cpf"),
|
|
DB::raw("CONCAT(cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome,', ', cadastro_endereco.numero, ' - ', cadastro_bairro.nome, ' - ', cadastro_municipio.nome, ' - ', intranet.cadastro_estado.nome) AS paciente_endereco_completo"),
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as paciente_prontuario'),
|
|
DB::raw("
|
|
IF(
|
|
COALESCE(
|
|
pronto_atendimento_pedido_exame.unidade_encaminhamento_id,
|
|
pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id
|
|
) IS NOT NULL,
|
|
'SIM',
|
|
'NÃO'
|
|
) AS encaminhado
|
|
"),
|
|
DB::raw("CONCAT(ocupacao_medico_solicitante.codigo, ' - ', ocupacao_medico_solicitante.nome) AS ocupacao_solicitante"),
|
|
DB::raw('COALESCE(CONCAT(sigtap_procedimento.codigo, " - ", sigtap_procedimento.nome), "-") AS procedimento'),
|
|
DB::raw('COALESCE(CONCAT(sigtap_ocupacao.codigo, " - ", sigtap_ocupacao.nome), "-") AS ocupacao_executante'),
|
|
DB::raw('COALESCE(profissional.nome, "-") AS profissional_executante_nome'),
|
|
'medico_solicitante.nome as profissional_solicitante_nome'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_pedido_exame_item',
|
|
'pronto_atendimento_pedido_exame_item.pedido_exame_id',
|
|
'pronto_atendimento_pedido_exame.id'
|
|
)
|
|
->join(
|
|
'parametrizacao_exame',
|
|
'parametrizacao_exame.id',
|
|
'pronto_atendimento_pedido_exame_item.exame_id'
|
|
)
|
|
->leftJoin('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.codigo', '=', DB::raw('parametrizacao_exame.codigo'))
|
|
->where('sigtap_procedimento.competencia_id', '=', function ($query) {
|
|
$query->select('sigtap.competencia.id')
|
|
->from('sigtap.competencia')
|
|
->orderByDesc('sigtap.competencia.valor')
|
|
->limit(1);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'parametrizacao_exame_status',
|
|
'parametrizacao_exame_status.id',
|
|
'pronto_atendimento_pedido_exame_item.status_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_domicilio',
|
|
'cadastro_domicilio.id',
|
|
'cadastro_cidadao.domicilio_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_endereco',
|
|
'cadastro_endereco.id',
|
|
'cadastro_domicilio.endereco_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_logradouro',
|
|
'cadastro_logradouro.id',
|
|
'cadastro_endereco.logradouro_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_logradouro_tipo',
|
|
'cadastro_logradouro_tipo.id',
|
|
'cadastro_logradouro.tipo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_bairro',
|
|
'cadastro_bairro.id',
|
|
'cadastro_logradouro.bairro_id'
|
|
)
|
|
->leftJoin(
|
|
'intranet.cadastro_municipio',
|
|
'cadastro_municipio.id',
|
|
'cadastro_logradouro.municipio_id'
|
|
)
|
|
->leftJoin(
|
|
'intranet.cadastro_estado',
|
|
'cadastro_estado.id',
|
|
'cadastro_municipio.estado_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
);
|
|
|
|
$exames->where('parametrizacao_exame.tipo_id', Tipo::IMAGEM)
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->when(!is_null(request()->unidade_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->exame_id ?? null), function ($query) {
|
|
|
|
return $query->where('parametrizacao_exame.id', request()->exame_id);
|
|
})
|
|
->when(!is_null($params['paciente_id'] ?? null), function ($query) use ($params) {
|
|
|
|
return $query->where('cadastro_cidadao.id', $params['paciente_id']);
|
|
})
|
|
->when(!is_null($params['prontuario'] ?? null), function ($query) use ($params) {
|
|
|
|
return $query->where('cadastro_paciente.prontuario', (int)$params['prontuario']);
|
|
})
|
|
->when(!is_null(request()->status_id ?? null), function ($query) {
|
|
|
|
return $query->where(function ($query) {
|
|
|
|
if (request()->status_id == Status::REALIZADO) {
|
|
|
|
$query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id)
|
|
->orWhereNull('pronto_atendimento_pedido_exame_item.status_id');
|
|
} else {
|
|
|
|
$query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
|
|
}
|
|
});
|
|
})
|
|
->when(!is_null(request()->encaminhado), function ($query) {
|
|
|
|
return $query->where(function ($query) {
|
|
|
|
if (request()->encaminhado === 'true') {
|
|
$query->whereNotNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
|
|
->orWhereNotNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
|
|
} else {
|
|
$query->whereNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
|
|
->whereNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
|
|
}
|
|
});
|
|
});
|
|
|
|
$exames = $exames
|
|
->orderBy('pronto_atendimento_atendimento_recepcao.atendido_em')
|
|
->get()
|
|
->toArray();
|
|
|
|
} else {
|
|
|
|
$exames = [];
|
|
}
|
|
|
|
$atendimentos = array_merge($procedimentos, $exames);
|
|
|
|
$totalizadores = [
|
|
'total' => array_sum(array_column($atendimentos, 'quantidade'))
|
|
];
|
|
|
|
return ['atendimentos' => $atendimentos, 'totalizadores' => $totalizadores];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
return [
|
|
'form' => self::getForm(),
|
|
'model' => self::getModel(),
|
|
'additionals' => [
|
|
'data_atual' => Carbon::today()->format('d/m/Y'),
|
|
]
|
|
];
|
|
}
|
|
|
|
private static function getForm()
|
|
{
|
|
$data = (object) [
|
|
'additionals' => [],
|
|
'form' => [],
|
|
'model' => [],
|
|
];
|
|
|
|
$params = request()->only(['data_inicial', 'data_final', 'horario_inicial', 'horario_final']);
|
|
|
|
self::adjustPeriod($params);
|
|
|
|
$sets = [
|
|
'unidades' => function () use ($data, $params) {
|
|
|
|
$data->form['unidades'] = self::getUnidades($params);
|
|
},
|
|
'infraestruturas' => function () use ($data, $params) {
|
|
|
|
$data->form['infraestruturas'] = self::getInfraestrutura($params);
|
|
},
|
|
'ocupacoesSolicitante' => function () use ($data, $params) {
|
|
|
|
$data->form['ocupacoesSolicitante'] = self::getOcupacoesSolicitante($params);
|
|
},
|
|
'usuariosSolicitante' => function () use ($data, $params) {
|
|
|
|
$data->form['usuariosSolicitante'] = self::getUsuariosSolicitante($params);
|
|
},
|
|
'ocupacoesExecutante' => function () use ($data, $params) {
|
|
|
|
$data->form['ocupacoesExecutante'] = self::getOcupacoesExecutante($params);
|
|
},
|
|
'usuariosExecutante' => function () use ($data, $params) {
|
|
|
|
$data->form['usuariosExecutante'] = self::getUsuariosExecutante($params);
|
|
},
|
|
'exames' => function () use ($data, $params) {
|
|
|
|
$data->form['exames'] = self::getExames($params);
|
|
},
|
|
'status' => function () use ($data, $params) {
|
|
|
|
$data->form['status'] = self::getStatus($params);
|
|
},
|
|
'encaminhado' => function () use ($data, $params) {
|
|
|
|
$data->form['encaminhado'] = self::getEncaminhados($params);
|
|
},
|
|
'pacientes' => function () use ($data, $params) {
|
|
|
|
$data->form['pacientes'] = self::getPacientes($params);
|
|
},
|
|
];
|
|
|
|
$load = is_null(request()->load_from);
|
|
|
|
foreach ($sets as $field => $set) {
|
|
|
|
if ($load) {
|
|
|
|
$set();
|
|
}
|
|
else if ($field === request()->load_from) {
|
|
|
|
$load = true;
|
|
}
|
|
}
|
|
|
|
foreach ($data as $property => $itens) {
|
|
|
|
if (empty($itens)) {
|
|
|
|
unset($data->{$property});
|
|
}
|
|
}
|
|
|
|
return $data->form;
|
|
}
|
|
|
|
private static function adjustPeriod(&$params)
|
|
{
|
|
$currentDate = Carbon::now()->format('d/m/Y');
|
|
|
|
$dataInicial = $params['data_inicial'] ?? $currentDate;
|
|
$dataFinal = $params['data_final'] ?? $currentDate;
|
|
$horarioInicial = $params['horario_inicial'] ?? null;
|
|
$horarioFinal = $params['horario_final'] ?? null;
|
|
|
|
if ($horarioInicial && $horarioFinal) {
|
|
$dataInicial = $horarioInicial ? "$dataInicial $horarioInicial" : $dataInicial;
|
|
$dataFinal = $horarioFinal ? "$dataFinal $horarioFinal" : $dataFinal;
|
|
|
|
$params['data_inicial'] = Carbon::createFromFormat('d/m/Y H:i:s', $dataInicial);
|
|
$params['data_final'] = Carbon::createFromFormat('d/m/Y H:i:s', $dataFinal);
|
|
} else {
|
|
if ($dataInicial) {
|
|
$params['data_inicial'] = Carbon::createFromFormat('d/m/Y', $dataInicial)->startOfDay();
|
|
}
|
|
if ($dataFinal) {
|
|
$params['data_final'] = Carbon::createFromFormat('d/m/Y', $dataFinal)->endOfDay();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function getUnidades($params)
|
|
{
|
|
return DB::table('cadastro_unidade')
|
|
->select(
|
|
'cadastro_unidade.id as id',
|
|
'cadastro_unidade.nome_fantasia as nome',
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.unidade_id',
|
|
'cadastro_unidade.id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.infraestrutura_id',
|
|
'cadastro_infraestrutura.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id',
|
|
'cadastro_centro_custo.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->union(DB::table('cadastro_unidade')
|
|
->select(
|
|
'cadastro_unidade.id as id',
|
|
'cadastro_unidade.nome_fantasia as nome',
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.unidade_id',
|
|
'cadastro_unidade.id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.infraestrutura_id',
|
|
'cadastro_infraestrutura.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id',
|
|
'cadastro_centro_custo.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_pedido_exame',
|
|
'pronto_atendimento_pedido_exame.atendimento_id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getInfraestrutura($params)
|
|
{
|
|
return DB::table('cadastro_infraestrutura')
|
|
->select(
|
|
'cadastro_infraestrutura.id as id',
|
|
'cadastro_infraestrutura.principal as principal',
|
|
DB::raw(
|
|
"CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN
|
|
cadastro_infraestrutura.nome
|
|
ELSE
|
|
cadastro_unidade.nome_fantasia
|
|
END AS nome"
|
|
),
|
|
)
|
|
->join(
|
|
'cadastro_unidade',
|
|
'cadastro_unidade.id',
|
|
'cadastro_infraestrutura.unidade_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.infraestrutura_id',
|
|
'cadastro_infraestrutura.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id',
|
|
'cadastro_centro_custo.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->union(DB::table('cadastro_infraestrutura')
|
|
->select(
|
|
'cadastro_infraestrutura.id as id',
|
|
'cadastro_infraestrutura.principal as principal',
|
|
DB::raw(
|
|
"CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN
|
|
cadastro_infraestrutura.nome
|
|
ELSE
|
|
cadastro_unidade.nome_fantasia
|
|
END AS nome"
|
|
),
|
|
)
|
|
->join(
|
|
'cadastro_unidade',
|
|
'cadastro_unidade.id',
|
|
'cadastro_infraestrutura.unidade_id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.infraestrutura_id',
|
|
'cadastro_infraestrutura.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id',
|
|
'cadastro_centro_custo.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_pedido_exame',
|
|
'pronto_atendimento_pedido_exame.atendimento_id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getOcupacoesSolicitante($params)
|
|
{
|
|
return DB::table('sigtap.ocupacao as ocupacao_medico_solicitante')
|
|
->select(
|
|
'ocupacao_medico_solicitante.id as id',
|
|
'ocupacao_medico_solicitante.nome as nome',
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.ocupacao_id',
|
|
'ocupacao_medico_solicitante.id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id',
|
|
'lotacao_medico_solicitante.id',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->union(DB::table('sigtap.ocupacao as ocupacao_medico_solicitante')
|
|
->select(
|
|
'ocupacao_medico_solicitante.id as id',
|
|
'ocupacao_medico_solicitante.nome as nome',
|
|
)
|
|
->join(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.ocupacao_id',
|
|
'ocupacao_medico_solicitante.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_pedido_exame',
|
|
'pronto_atendimento_pedido_exame.created_lotacao_id',
|
|
'lotacao_medico_solicitante.id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->join(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_pedido_exame.created_centro_custo_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getUsuariosSolicitante($params)
|
|
{
|
|
|
|
return DB::table('cadastro_usuario as usuario_medico_solicitante')
|
|
->select(
|
|
'medico_solicitante.id as id',
|
|
'medico_solicitante.nome as nome',
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id',
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.usuario_id',
|
|
'usuario_medico_solicitante.id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id',
|
|
'lotacao_medico_solicitante.id',
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->union(DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
'medico_solicitante.id as id',
|
|
'medico_solicitante.nome as nome',
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_pedido_exame.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getOcupacoesExecutante($params)
|
|
{
|
|
return DB::table('sigtap.ocupacao as sigtap_ocupacao')
|
|
->select(
|
|
'sigtap_ocupacao.id as id',
|
|
'sigtap_ocupacao.nome as nome',
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.ocupacao_id',
|
|
'sigtap_ocupacao.id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id',
|
|
'cadastro_lotacao.id',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_executante',
|
|
'lotacao_medico_executante.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_executante',
|
|
'ocupacao_medico_executante.id',
|
|
'lotacao_medico_executante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_executante',
|
|
'usuario_medico_executante.id',
|
|
'lotacao_medico_executante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_executante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_executante.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('medico_executante.id', request()->usuario_executante_id);
|
|
})
|
|
->groupBy('id')
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
private static function getUsuariosExecutante($params)
|
|
{
|
|
return DB::table('cadastro_usuario')
|
|
->select(
|
|
'profissional.id as id',
|
|
'profissional.nome as nome',
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.usuario_id',
|
|
'cadastro_usuario.id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_procedimento',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id',
|
|
'cadastro_lotacao.id',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_executante',
|
|
'lotacao_medico_executante.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_executante',
|
|
'ocupacao_medico_executante.id',
|
|
'lotacao_medico_executante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_executante',
|
|
'usuario_medico_executante.id',
|
|
'lotacao_medico_executante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_executante',
|
|
'medico_executante.id',
|
|
'usuario_medico_executante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_executante.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('medico_executante.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->groupBy('id')
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
private static function getExames($params)
|
|
{
|
|
return DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
DB::raw('COALESCE(
|
|
(SELECT UPPER(e.nome)
|
|
FROM parametrizacao_exame e
|
|
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
|
|
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
|
|
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
|
|
AND e.codigo = sigtap_procedimento.codigo
|
|
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
|
|
NULL) AS nome'
|
|
),
|
|
DB::raw('COALESCE(
|
|
(SELECT e.id
|
|
FROM parametrizacao_exame e
|
|
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
|
|
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
|
|
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
|
|
AND e.codigo = sigtap_procedimento.codigo
|
|
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
|
|
NULL) AS id'
|
|
),
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_profissional_executante',
|
|
'lotacao_profissional_executante.id',
|
|
'pronto_atendimento_atendimento_procedimento.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'lotacao_profissional_executante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'lotacao_profissional_executante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as cidadao_profissional_executante',
|
|
'cidadao_profissional_executante.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id ?? null), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_profissional_executante.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('cidadao_profissional_executante.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->havingRaw('nome IS NOT NULL')
|
|
->union(DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
DB::raw('COALESCE(
|
|
(SELECT UPPER(e.nome)
|
|
FROM parametrizacao_exame e
|
|
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
|
|
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
|
|
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
|
|
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
|
|
NULL) AS nome'
|
|
),
|
|
DB::raw('COALESCE(
|
|
(SELECT e.id
|
|
FROM parametrizacao_exame e
|
|
INNER JOIN pronto_atendimento_pedido_exame_item ei ON ei.exame_id = e.id
|
|
INNER JOIN pronto_atendimento_pedido_exame pe ON pe.id = ei.pedido_exame_id
|
|
WHERE pe.atendimento_id = pronto_atendimento_atendimento.id
|
|
AND e.tipo_id = ' . Tipo::IMAGEM . ' LIMIT 1),
|
|
NULL) AS id'
|
|
),
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame_item.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->havingRaw('nome IS NOT NULL')
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getStatus($params)
|
|
{
|
|
return DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
DB::raw('' . Status::REALIZADO . ' as id'),
|
|
DB::raw('"REALIZADO" AS nome'),
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM)
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
$query->where('exame.id', request()->exame_id);
|
|
});
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->union( DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
'parametrizacao_exame_status.id as id',
|
|
'parametrizacao_exame_status.nome as nome',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'parametrizacao_exame_status',
|
|
'parametrizacao_exame_status.id',
|
|
'pronto_atendimento_pedido_exame_item.status_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
|
|
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getEncaminhados($params)
|
|
{
|
|
return DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
DB::raw('
|
|
CASE
|
|
WHEN pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id IS NOT NULL
|
|
OR pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id IS NOT NULL
|
|
THEN true
|
|
ELSE false
|
|
END as value'),
|
|
DB::raw('
|
|
CASE
|
|
WHEN pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id IS NOT NULL
|
|
OR pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id IS NOT NULL
|
|
THEN "SIM"
|
|
ELSE "NÃO"
|
|
END as text')
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM)
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
$query->where('exame.id', request()->exame_id);
|
|
});
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->union(DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
DB::raw('
|
|
CASE
|
|
WHEN pronto_atendimento_pedido_exame.unidade_encaminhamento_id IS NOT NULL
|
|
OR pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id IS NOT NULL
|
|
THEN true
|
|
ELSE false
|
|
END as value'),
|
|
DB::raw('
|
|
CASE
|
|
WHEN pronto_atendimento_pedido_exame.unidade_encaminhamento_id IS NOT NULL
|
|
OR pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id IS NOT NULL
|
|
THEN "SIM"
|
|
ELSE "NÃO"
|
|
END as text')
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->status_id ?? null), function ($query) {
|
|
|
|
return $query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
|
|
})
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
|
|
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getPacientes($params)
|
|
{
|
|
return DB::table('pronto_atendimento_atendimento_procedimento')
|
|
->select(
|
|
'cadastro_cidadao.id as id',
|
|
'cadastro_cidadao.nome as nome',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_atendimento_procedimento.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('sigtap.procedimento as sigtap_procedimento', function ($join) {
|
|
$join->on('sigtap_procedimento.id', '=', 'pronto_atendimento_atendimento_procedimento.procedimento_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.codigo', 'sigtap_procedimento.codigo')
|
|
->where('exame.tipo_id', Tipo::IMAGEM)
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
$query->where('exame.id', request()->exame_id);
|
|
});
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_atendimento_procedimento.lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->encaminhado), function ($query) {
|
|
|
|
return $query->where(function ($query) {
|
|
|
|
if (request()->encaminhado === 'true') {
|
|
$query->whereNotNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
|
|
->orWhereNotNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
|
|
} else {
|
|
$query->whereNull('pronto_atendimento_atendimento_recepcao.unidade_encaminhamento_id')
|
|
->whereNull('pronto_atendimento_atendimento_recepcao.unidade_externa_encaminhamento_id');
|
|
}
|
|
});
|
|
})
|
|
->union(DB::table('pronto_atendimento_pedido_exame')
|
|
->select(
|
|
'cadastro_cidadao.id as id',
|
|
'cadastro_cidadao.nome as nome',
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento',
|
|
'pronto_atendimento_atendimento.id',
|
|
'pronto_atendimento_pedido_exame.atendimento_id'
|
|
)
|
|
->join(
|
|
'pronto_atendimento_atendimento_recepcao',
|
|
'pronto_atendimento_atendimento_recepcao.id',
|
|
'pronto_atendimento_atendimento.id'
|
|
)
|
|
->join('pronto_atendimento_pedido_exame_item', function ($join) {
|
|
$join->on('pronto_atendimento_pedido_exame_item.pedido_exame_id', '=', 'pronto_atendimento_pedido_exame.id')
|
|
->whereIn('pronto_atendimento_pedido_exame_item.status_id', [
|
|
Status::SOLICITADO,
|
|
Status::AGUARDANDO_RESULTADO,
|
|
Status::NAO_REALIZADO
|
|
])
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('parametrizacao_exame as exame')
|
|
->whereColumn('exame.id', 'pronto_atendimento_pedido_exame_item.exame_id')
|
|
->where('exame.tipo_id', Tipo::IMAGEM);
|
|
});
|
|
})
|
|
->leftJoin(
|
|
'cadastro_lotacao',
|
|
'cadastro_lotacao.id',
|
|
'pronto_atendimento_pedido_exame_item.lotacao_executante_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as sigtap_ocupacao',
|
|
'sigtap_ocupacao.id',
|
|
'cadastro_lotacao.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_centro_custo',
|
|
'cadastro_centro_custo.id',
|
|
'pronto_atendimento_atendimento.created_centro_custo_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'cadastro_centro_custo.infraestrutura_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
'cadastro_lotacao.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as profissional',
|
|
'profissional.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_lotacao as lotacao_medico_solicitante',
|
|
'lotacao_medico_solicitante.id',
|
|
'pronto_atendimento_pedido_exame_item.created_lotacao_id'
|
|
)
|
|
->leftJoin(
|
|
'sigtap.ocupacao as ocupacao_medico_solicitante',
|
|
'ocupacao_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.ocupacao_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_usuario as usuario_medico_solicitante',
|
|
'usuario_medico_solicitante.id',
|
|
'lotacao_medico_solicitante.usuario_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao as medico_solicitante',
|
|
'medico_solicitante.id',
|
|
'usuario_medico_solicitante.cidadao_id'
|
|
)
|
|
->leftJoin(
|
|
'pronto_atendimento_faa',
|
|
'pronto_atendimento_faa.id',
|
|
'pronto_atendimento_atendimento.faa_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_paciente',
|
|
'cadastro_paciente.id',
|
|
'pronto_atendimento_faa.paciente_id'
|
|
)
|
|
->leftJoin(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_paciente.cidadao_id'
|
|
)
|
|
->whereBetween(
|
|
'pronto_atendimento_atendimento_recepcao.atendido_em',
|
|
[
|
|
$params['data_inicial'] ?? null,
|
|
$params['data_final'] ?? null
|
|
]
|
|
)
|
|
->when(!is_null(request()->unidade_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(!is_null(request()->infraestrutura_id), function ($query) {
|
|
|
|
return $query->where('cadastro_infraestrutura.id', request()->infraestrutura_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_executante_id), function ($query) {
|
|
|
|
return $query->where('cadastro_lotacao.ocupacao_id', request()->ocupacao_executante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_executante_id), function ($query) {
|
|
|
|
return $query->where('profissional.id', request()->usuario_executante_id);
|
|
})
|
|
->when(!is_null(request()->ocupacao_solicitante_id), function ($query) {
|
|
|
|
return $query->where('lotacao_medico_solicitante.ocupacao_id', request()->ocupacao_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->usuario_solicitante_id), function ($query) {
|
|
|
|
return $query->where('medico_solicitante.id', request()->usuario_solicitante_id);
|
|
})
|
|
->when(!is_null(request()->exame_id), function ($query) {
|
|
|
|
return $query->where('pronto_atendimento_pedido_exame_item.exame_id', request()->exame_id);
|
|
})
|
|
->when(!is_null(request()->status_id ?? null), function ($query) {
|
|
|
|
return $query->where('pronto_atendimento_pedido_exame_item.status_id', request()->status_id);
|
|
})
|
|
->when(!is_null(request()->encaminhado), function ($query) {
|
|
|
|
return $query->where(function ($query) {
|
|
|
|
if (request()->encaminhado === 'true') {
|
|
$query->whereNotNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
|
|
->orWhereNotNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
|
|
} else {
|
|
$query->whereNull('pronto_atendimento_pedido_exame.unidade_encaminhamento_id')
|
|
->whereNull('pronto_atendimento_pedido_exame.unidade_externa_encaminhamento_id');
|
|
}
|
|
});
|
|
})
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getModel()
|
|
{
|
|
return [
|
|
'data_inicial' => null,
|
|
'data_final' => null,
|
|
'horario_inicial' => null,
|
|
'horario_final' => null,
|
|
'unidade_id' => null,
|
|
'infraestrutura_id' => null,
|
|
'ocupacao_solicitante_id' => null,
|
|
'usuario_solicitante_id' => null,
|
|
'ocupacao_executante_id' => null,
|
|
'usuario_executante_id' => null,
|
|
'exame_id' => null,
|
|
'status_id' => null,
|
|
'encaminhado' => null,
|
|
'paciente_id' => null,
|
|
'prontuario' => null,
|
|
];
|
|
}
|
|
}
|