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, ]; } }