0, ]; $params = self::getParams(); $procedimentosBuilder = DB::table('bpa_procedimento as bpa_procedimento') ->join('cadastro_paciente as paciente', 'paciente.id', 'bpa_procedimento.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.id') ->join('sigtap.procedimento as procedimento', 'procedimento.id', 'bpa_procedimento.procedimento_id') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'bpa_procedimento.unidade_id') ->leftJoin('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'bpa_procedimento.ocupacao_id') ->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'bpa_procedimento.usuario_id') ->leftJoin('cadastro_cidadao as usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id') ->leftJoin('sigtap.cid as cid', 'cid.id', 'bpa_procedimento.cid_id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ->when($params->ocupacao_id, fn ($q, $id) => $q->where('bpa_procedimento.ocupacao_id', $id)) ->when($params->usuario_id, fn ($q, $id) => $q->where('bpa_procedimento.usuario_id', $id)) ->when($params->procedimento_codigo, fn ($q, $codigo) => $q->where('procedimento.codigo', $codigo)) ->when($params->cid_id, fn ($q, $id) => $q->where('bpa_procedimento.cid_id', $id)) ->when($params->com_inconsistencia === true, fn ($q) => $q->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento_inconsistencia as procedimento_inconsistencia') ->whereColumn('procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id') )) ->when($params->com_inconsistencia === false, fn ($q) => $q->whereNotExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento_inconsistencia as procedimento_inconsistencia') ->whereColumn('procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id') )) ->selectRaw(" bpa_procedimento.id, procedimento.codigo as procedimento_codigo, procedimento.nome as procedimento_nome, unidade.id as unidade_id, CONCAT(unidade.nome_fantasia, IF (unidade.cnes IS NULL, '', CONCAT(' - ', unidade.cnes))) as unidade_descricao, ocupacao.codigo as ocupacao_codigo, ocupacao.nome as ocupacao_nome, CONCAT(usuario_cidadao.nome, IF (usuario_cidadao.cns IS NULL, '', CONCAT(' - ', usuario_cidadao.cns))) as usuario_descricao, TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) AS idade, cid.codigo as cid_codigo, cid.nome as cid_nome, bpa_procedimento.data_atendimento, IF (EXISTS( SELECT 1 FROM bpa_procedimento_inconsistencia as procedimento_inconsistencia WHERE procedimento_inconsistencia.procedimento_id = bpa_procedimento.id ), 1, 0 ) as com_inconsistencia, bpa_procedimento.origem as origem, bpa_procedimento.quantidade "); self::setOrderBy($procedimentosBuilder); $procedimentos = $procedimentosBuilder->get(); $procedimentos->each(function ($item) use ($totalizadores) { $item->procedimento_codigo = MaskUtil::getProcedimentoMasked($item->procedimento_codigo); $item->cid_codigo = $item->cid_codigo ? MaskUtil::getCidMasked($item->cid_codigo) : null; $item->procedimento_descricao = "{$item->procedimento_codigo} - {$item->procedimento_nome}"; $item->ocupacao_descricao = "{$item->ocupacao_codigo} - {$item->ocupacao_nome}"; $item->cid_descricao = $item->cid_codigo ? "{$item->cid_codigo} - {$item->cid_nome}" : null; $item->com_inconsistencia_value = (bool) $item->com_inconsistencia; $item->com_inconsistencia = $item->com_inconsistencia_value ? 'SIM' : 'NÃO'; unset( $item->procedimento_codigo, $item->procedimento_nome, $item->ocupacao_codigo, $item->ocupacao_nome, $item->cid_codigo, $item->cid_nome ); $totalizadores->quantidade += $item->quantidade; }); return compact('procedimentos', 'totalizadores'); } private static function setOrderBy($builder) { $columns = [ 'procedimento_descricao' => "CONCAT(procedimento.codigo, ' - ', procedimento.nome)", 'unidade_descricao' => "CONCAT(unidade.nome_fantasia, IF (unidade.cnes IS NULL, '', CONCAT(' - ', unidade.cnes)))", 'ocupacao_descricao' => "CONCAT(ocupacao.codigo, ' - ', ocupacao.nome)", 'usuario_descricao' => "CONCAT(usuario_cidadao.nome, IF (usuario_cidadao.cns IS NULL, '', CONCAT(' - ', usuario_cidadao.cns)))", 'idade' => 'TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW())', 'cid_descricao' => "CONCAT(cid.codigo, ' - ', cid.nome)", 'data_atendimento' => 'bpa_procedimento.data_atendimento', 'com_inconsistencia' => 'com_inconsistencia', 'origem' => 'bpa_procedimento.origem', 'quantidade' => 'quantidade', ]; if (is_null(request()->sortBy)) { $builder->orderByRaw('bpa_procedimento.id'); return; } $column = $columns[request()->sortBy]; $direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC'; unset($columns[request()->sortBy]); $builder->orderByRaw("{$column} {$direction}, bpa_procedimento.id"); } public static function list() { $data = (object) [ 'form' => [], 'model' => [], ]; $params = self::getParams(); $sets = [ 'ano' => function () use ($data, $params) { $anosData = self::getAnosData(); $data->form['anos'] = $anosData['form']; $data->model['ano'] = $anosData['model']; $params->ano = $data->model['ano']; }, 'competencia' => function () use ($data, $params) { $competenciasData = self::getCompetenciasData($params); $data->form['competencias'] = $competenciasData['form']; $data->model['competencia_id'] = $competenciasData['model']; $params->competencia_id = $data->model['competencia_id']; }, 'unidade' => function () use ($data, $params) { $unidadesData = self::getUnidadesData($params); $data->form['unidades'] = $unidadesData['form']; $data->model['unidade_id'] = $unidadesData['model']; $params->unidade_id = $data->model['unidade_id']; }, 'ocupacao' => function () use ($data, $params) { $ocupacoesData = self::getOcupacoesData($params); $data->form['ocupacoes'] = $ocupacoesData['form']; $data->model['ocupacao_id'] = $ocupacoesData['model']; $params->ocupacao_id = $data->model['ocupacao_id']; }, 'usuario' => function () use ($data, $params) { $usuariosData = self::getUsuariosData($params); $data->form['usuarios'] = $usuariosData['form']; $data->model['usuario_id'] = $usuariosData['model']; $params->usuario_id = $data->model['usuario_id']; }, 'procedimento' => function () use ($data, $params) { $procedimentosData = self::getProcedimentosData($params); $data->form['procedimentos'] = $procedimentosData['form']; $data->model['procedimento_codigo'] = $procedimentosData['model']; $params->procedimento_codigo = $data->model['procedimento_codigo']; }, 'cid' => function () use ($data, $params) { $cidsData = self::getCidsData($params); $data->form['cids'] = $cidsData['form']; $data->model['cid_id'] = $cidsData['model']; $params->cid_id = $data->model['cid_id']; }, 'inconsistencia' => function () use ($data, $params) { $inconsistenciasData = self::getInconsistenciasData($params); $data->form['inconsistencias'] = $inconsistenciasData['form']; $data->model['com_inconsistencia'] = $inconsistenciasData['model']; $params->com_inconsistencia = $data->model['com_inconsistencia']; }, ]; $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; } private static function getParams() { $params = (object) request()->only([ 'ano', 'competencia_id', 'unidade_id', 'ocupacao_id', 'usuario_id', 'procedimento_codigo', 'cid_id', 'com_inconsistencia', ]); if (isset($params->com_inconsistencia)) { $params->com_inconsistencia = DataUtil::isStringBoolean($params->com_inconsistencia) ? DataUtil::getBooleanValueFromStringBoolean($params->com_inconsistencia) : null; } return $params; } private static function getAnosData() { $anos = DB::table('sigtap.competencia as competencia') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.competencia_id', 'competencia.id') ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ) ->selectRaw(" SUBSTRING(competencia.valor, 1, 4) as ano ") ->orderByRaw("SUBSTRING(competencia.valor, 1, 4) DESC") ->distinct() ->get(); $ano = null; return ['form' => $anos, 'model' => $ano]; } private static function getCompetenciasData($params) { $competencias = collect(); $id = null; if (!is_null($params->ano)) { $competencias = DB::table('sigtap.competencia as competencia') ->whereRaw("SUBSTRING(competencia.valor, 1, 4) = '{$params->ano}'") ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.competencia_id', 'competencia.id') ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ) ->selectRaw(" competencia.id, SUBSTRING(competencia.valor, 5, 7) as mes ") ->orderByRaw("SUBSTRING(competencia.valor, 5, 7)") ->get(); } return ['form' => $competencias, 'model' => $id]; } private static function getUnidadesData($params) { $unidades = collect(); $id = null; if (!is_null($params->competencia_id)) { $unidades = DB::table('cadastro_unidade as unidade') ->whereNull('unidade.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.unidade_id', 'unidade.id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ) ->selectRaw(" unidade.id, CONCAT(unidade.nome_fantasia, IF (unidade.cnes IS NULL, '', CONCAT(' - ', unidade.cnes))) as descricao ") ->orderByRaw("CONCAT(unidade.nome_fantasia, IF (unidade.cnes IS NULL, '', CONCAT(' - ', unidade.cnes)))") ->get(); } return ['form' => $unidades, 'model' => $id]; } private static function getOcupacoesData($params) { $ocupacoes = collect(); $id = null; if (!is_null($params->competencia_id)) { $ocupacoes = DB::table('sigtap.ocupacao as ocupacao') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.ocupacao_id', 'ocupacao.id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ) ->selectRaw(" ocupacao.id, CONCAT(ocupacao.codigo, ' - ', ocupacao.nome) as descricao ") ->orderByRaw("CONCAT(ocupacao.codigo, ' - ', ocupacao.nome)") ->get(); } return ['form' => $ocupacoes, 'model' => $id]; } private static function getUsuariosData($params) { $ocupacoes = collect(); $id = null; if (!is_null($params->competencia_id)) { $ocupacoes = DB::table('cadastro_usuario as usuario') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->whereNull('usuario.deleted_at') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.usuario_id', 'usuario.id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ->when($params->ocupacao_id, fn ($q, $id) => $q->where('bpa_procedimento.ocupacao_id', $id)) ) ->selectRaw(" usuario.id, CONCAT(cidadao.nome, IF (cidadao.cns IS NULL, '', CONCAT(' - ', cidadao.cns))) as descricao ") ->orderByRaw("CONCAT(cidadao.nome, IF (cidadao.cns IS NULL, '', CONCAT(' - ', cidadao.cns)))") ->get(); } return ['form' => $ocupacoes, 'model' => $id]; } private static function getProcedimentosData($params) { $procedimentos = collect(); $codigo = null; if (!is_null($params->competencia_id)) { $procedimentos = DB::table('sigtap.procedimento as procedimento') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->whereColumn('bpa_procedimento.procedimento_id', 'procedimento.id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ->when($params->ocupacao_id, fn ($q, $id) => $q->where('bpa_procedimento.ocupacao_id', $id)) ->when($params->usuario_id, fn ($q, $id) => $q->where('bpa_procedimento.usuario_id', $id)) ) ->selectRaw(" procedimento.codigo, procedimento.nome ") ->orderByRaw("CONCAT(procedimento.codigo, ' - ', procedimento.nome)") ->distinct() ->get() ->map(fn ($procedimento) => (object) [ 'codigo' => $procedimento->codigo, 'descricao' => MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}", ]); } return ['form' => $procedimentos, 'model' => $codigo]; } private static function getCidsData($params) { $cids = collect(); $id = null; if (!is_null($params->competencia_id)) { $cids = DB::table('sigtap.cid as cid') ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->join('sigtap.procedimento as procedimento', 'procedimento.id', 'bpa_procedimento.procedimento_id') ->whereColumn('bpa_procedimento.cid_id', 'cid.id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ->when($params->ocupacao_id, fn ($q, $id) => $q->where('bpa_procedimento.ocupacao_id', $id)) ->when($params->usuario_id, fn ($q, $id) => $q->where('bpa_procedimento.usuario_id', $id)) ->when($params->procedimento_codigo, fn ($q, $codigo) => $q->where('procedimento.codigo', $codigo)) ) ->selectRaw(" cid.id, cid.codigo, cid.nome ") ->orderByRaw("CONCAT(cid.codigo, ' - ', cid.nome)") ->get() ->map(fn ($cid) => (object) [ 'id' => $cid->id, 'descricao' => MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}", ]); } return ['form' => $cids, 'model' => $id]; } private static function getInconsistenciasData($params) { $inconsistencias = collect(); $value = null; if (!is_null($params->competencia_id)) { $exists = function ($comInconsistencia) use ($params) { return DB::table('bpa_procedimento as bpa_procedimento') ->join('sigtap.registro as registro', 'registro.id', 'bpa_procedimento.registro_id') ->join('sigtap.procedimento as procedimento', 'procedimento.id', 'bpa_procedimento.procedimento_id') ->where('bpa_procedimento.competencia_id', $params->competencia_id) ->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO) ->when($params->unidade_id, fn ($q, $id) => $q->where('bpa_procedimento.unidade_id', $id)) ->when($params->ocupacao_id, fn ($q, $id) => $q->where('bpa_procedimento.ocupacao_id', $id)) ->when($params->usuario_id, fn ($q, $id) => $q->where('bpa_procedimento.usuario_id', $id)) ->when($params->procedimento_codigo, fn ($q, $codigo) => $q->where('procedimento.codigo', $codigo)) ->when($params->cid_id, fn ($q, $id) => $q->where('bpa_procedimento.cid_id', $id)) ->when($comInconsistencia, fn ($q) => $q->whereExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento_inconsistencia as procedimento_inconsistencia') ->whereColumn('procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id') ), fn ($q) => $q->whereNotExists(fn ($q) => $q ->selectRaw(1) ->from('bpa_procedimento_inconsistencia as procedimento_inconsistencia') ->whereColumn('procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id') ) ) ->exists(); }; if ($exists(false)) { $inconsistencias->push((object) ['value' => false, 'text' => 'NÃO']); } if ($exists(true)) { $inconsistencias->push((object) ['value' => true, 'text' => 'SIM']); } } return ['form' => $inconsistencias->sortBy('text')->values(), 'model' => $value]; } public static function getInconsistencias($bpaProcedimentoId) { $bpaProcedimento = BpaProcedimento::findOrFail($bpaProcedimentoId); $inconsistencias = DB::table('bpa_inconsistencia as inconsistencia') ->join( 'bpa_procedimento_inconsistencia as procedimento_inconsistencia', 'procedimento_inconsistencia.inconsistencia_id', 'inconsistencia.id' ) ->where('procedimento_inconsistencia.procedimento_id', $bpaProcedimentoId) ->selectRaw(" inconsistencia.id, inconsistencia.descricao ") ->orderBy('inconsistencia.descricao') ->get(); return [ 'paciente_nome' => $bpaProcedimento->paciente->cidadao->nome, 'usuario_nome' => $bpaProcedimento->usuario->cidadao->nome ?? null, 'unidade_nome_fantasia' => $bpaProcedimento->unidade->nome_fantasia, 'data_atendimento' => Carbon::create($bpaProcedimento->data_atendimento)->format('d/m/Y'), 'inconsistencias' => $inconsistencias, ]; } public static function getPrintExportData() { $resultado = self::index(); $itens = $resultado['procedimentos']; $itens->each(function ($item) { if ($item->data_atendimento) { $item->data_atendimento = (new Carbon($item->data_atendimento))->format('d/m/Y'); } }); $params = self::getParams(); $competencia = Competencia::find($params->competencia_id); $unidade = $params->unidade_id ? Unidade::find($params->unidade_id) : null; $ocupacao = $params->ocupacao_id ? Ocupacao::find($params->ocupacao_id) : null; $usuario = $params->usuario_id ? Usuario::find($params->usuario_id)->cidadao->nome : null; $procedimento = $params->procedimento_codigo ? Procedimento::where('competencia_id', '<=', $params->competencia_id) ->where('codigo', $params->procedimento_codigo) ->orderByDesc('competencia_id') ->first() : null; $cid = $params->cid_id ? Cid::find($params->cid_id) : null; return [ 'ano' => Str::substr($competencia->valor, 0, 4), 'mes' => Str::substr($competencia->valor, 4, 2), 'unidade' => $unidade ? ($unidade->nome_fantasia . ($unidade->cnes ? " - {$unidade->cnes}": '')) : 'Todas', 'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas', 'usuario' => $usuario ?? 'Todos', 'procedimento' => $procedimento ? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos', 'cid' => $cid ? MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}" : 'Todos', 'comInconsistencia' => $params->com_inconsistencia === null ? 'Todas' : ($params->com_inconsistencia ? 'SIM' : 'NÃO'), 'colunas' => collect(request()->selectedCols), 'itens' => $itens, 'totalizadores' => $resultado['totalizadores'], ]; } }