periodo['start'])->setTime(0, 0, 0), Carbon::createFromFormat('d/m/Y', request()->periodo['end'])->setTime(23, 59, 59) ]; $triagemQuery = DB::table('pronto_atendimento_atendimento_triagem as triagem') ->join('cadastro_centro_custo as centro_custo', 'centro_custo.id', 'triagem.created_centro_custo_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'centro_custo.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('cadastro_lotacao as lotacao', 'lotacao.id', 'triagem.created_lotacao_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('pronto_atendimento_atendimento as atendimento', 'atendimento.id', 'triagem.atendimento_id') ->join('pronto_atendimento_faa as faa', 'faa.id', 'atendimento.faa_id') ->whereNull('triagem.deleted_at') ->where('triagem.is_faa_assinada', false) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('centro_custo.infraestrutura_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id)) ->when(request()->profissional_id, fn ($q, $id) => $q->where('lotacao.usuario_id', $id)) ->whereBetween('triagem.created_at', $periodo) ->select(DB::raw(" 'TRIAGEM' as tipo, triagem.created_at as data_hora, unidade.nome_fantasia as unidade, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura, cidadao.nome as profissional, atendimento.faa_id AS faa, faa.numero AS faa_numero ")); $medicoQuery = DB::table('pronto_atendimento_atendimento_medico as medico') ->join('cadastro_centro_custo as centro_custo', 'centro_custo.id', 'medico.created_centro_custo_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'centro_custo.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('cadastro_lotacao as lotacao', 'lotacao.id', 'medico.created_lotacao_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('pronto_atendimento_atendimento as atendimento', 'atendimento.id', 'medico.atendimento_id') ->join('pronto_atendimento_faa as faa', 'faa.id', 'atendimento.faa_id') ->whereNull('medico.deleted_at') ->where('medico.is_faa_assinada', false) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('centro_custo.infraestrutura_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id)) ->when(request()->profissional_id, fn ($q, $id) => $q->where('lotacao.usuario_id', $id)) ->whereBetween('medico.created_at', $periodo) ->select(DB::raw(" CONCAT('MÉDICO', IF(medico.is_observacao = 1,' (OBSERVAÇÃO)', '')) as tipo, medico.created_at as data_hora, unidade.nome_fantasia as unidade, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura, cidadao.nome as profissional, atendimento.faa_id AS faa, faa.numero AS faa_numero ")); $enfermagemQuery = DB::table('pronto_atendimento_atendimento_enfermagem as enfermagem') ->join('cadastro_centro_custo as centro_custo', 'centro_custo.id', 'enfermagem.created_centro_custo_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'centro_custo.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('cadastro_lotacao as lotacao', 'lotacao.id', 'enfermagem.created_lotacao_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('pronto_atendimento_atendimento as atendimento', 'atendimento.id', 'enfermagem.atendimento_id') ->join('pronto_atendimento_faa as faa', 'faa.id', 'atendimento.faa_id') ->whereNull('enfermagem.deleted_at') ->where('enfermagem.is_faa_assinada', false) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('centro_custo.infraestrutura_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id)) ->when(request()->profissional_id, fn ($q, $id) => $q->where('lotacao.usuario_id', $id)) ->whereBetween('enfermagem.created_at', $periodo) ->select(DB::raw(" 'ENFERMAGEM' as tipo, enfermagem.created_at as data_hora, unidade.nome_fantasia as unidade, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura, cidadao.nome as profissional, atendimento.faa_id AS faa, faa.numero AS faa_numero ")); $observacaoQuery = DB::table('pronto_atendimento_paciente_observacao as observacao') ->join('cadastro_centro_custo as centro_custo', 'centro_custo.id', 'observacao.created_centro_custo_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'centro_custo.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('cadastro_lotacao as lotacao', 'lotacao.id', 'observacao.created_lotacao_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('pronto_atendimento_atendimento as atendimento', 'atendimento.id', 'observacao.atendimento_id') ->join('pronto_atendimento_faa as faa', 'faa.id', 'atendimento.faa_id') ->whereNull('observacao.deleted_at') ->where('observacao.is_faa_assinada', false) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('centro_custo.infraestrutura_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id)) ->when(request()->profissional_id, fn ($q, $id) => $q->where('lotacao.usuario_id', $id)) ->whereBetween('observacao.created_at', $periodo) ->select(DB::raw(" 'ENFERMAGEM (OBSERVAÇÃO)' as tipo, observacao.created_at as data_hora, unidade.nome_fantasia as unidade, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura, cidadao.nome as profissional, atendimento.faa_id AS faa, faa.numero AS faa_numero ")); $receitaMedicaQuery = DB::table('pronto_atendimento_atendimento_medico_receita as receita') ->join('cadastro_centro_custo as centro_custo', 'centro_custo.id', 'receita.created_centro_custo_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'centro_custo.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('cadastro_lotacao as lotacao', 'lotacao.id', 'receita.created_lotacao_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('pronto_atendimento_atendimento_medico as medico', 'medico.id', 'receita.atendimento_medico_id') ->join('pronto_atendimento_atendimento as atendimento', 'atendimento.id', 'medico.atendimento_id') ->join('pronto_atendimento_faa as faa', 'faa.id', 'atendimento.faa_id') ->whereNull('receita.deleted_at') ->where('receita.is_assinada', false) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('centro_custo.infraestrutura_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id)) ->when(request()->profissional_id, fn ($q, $id) => $q->where('lotacao.usuario_id', $id)) ->whereBetween('receita.created_at', $periodo) ->select(DB::raw(" CONCAT('MÉDICO', IF(medico.is_observacao = 1,' (OBSERVAÇÃO)', ''), ' - RECEITA MÉDICA') as tipo, receita.created_at as data_hora, unidade.nome_fantasia as unidade, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura, cidadao.nome as profissional, atendimento.faa_id AS faa, faa.numero AS faa_numero ")); $documentos = null; if (request()->tipo_documento == 'atendimento') { $documentos = $triagemQuery ->unionAll($medicoQuery) ->unionAll($enfermagemQuery) ->unionAll($observacaoQuery); } else if (request()->tipo_documento == 'receita_medica') { $documentos = $receitaMedicaQuery; } else { $documentos = $triagemQuery ->unionAll($medicoQuery) ->unionAll($enfermagemQuery) ->unionAll($observacaoQuery) ->unionAll($receitaMedicaQuery); } $documentos = $documentos ->orderBy('data_hora') ->get(); return compact('documentos'); } public static function list() { return [ 'additionals' => self::getAdditionalsData(), 'form' => self::getFormData(), 'model' => self::getModelData(), ]; } public static function getAdditionalsData() { return [ 'data_atual' => Carbon::now()->format('d/m/Y'), ]; } public static function getFormData() { $unidades = Unidade::orderBy('nome_fantasia') ->get(['id', 'nome_fantasia']) ->map(fn ($unidade) => [ 'id' => $unidade->id, 'nome_fantasia' => $unidade->nome_fantasia, 'infraestruturas' => $unidade->infraestruturas() ->get(['id', 'nome', 'principal', 'unidade_id']) ->map(fn ($infraestrutura) => [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, 'profissionais' => $infraestrutura->lotacoes() ->with([ 'usuario:id,cidadao_id', 'usuario.cidadao:id,nome', ]) ->distinct() ->get(['usuario_id']) ->map(fn ($lotacao) => [ 'id' => $lotacao->usuario_id, 'nome' => $lotacao->usuario()->withTrashed()->first()->cidadao->nome ]) ->sortBy('nome') ->values() ]) ->sortBy('nome') ->values() ]); return [ 'unidades' => $unidades, 'tipos_documento' => self::getTiposDocumento(), ]; } private static function getTiposDocumento() { return collect([ ['value' => 'atendimento', 'text' => 'ATENDIMENTO'], ['value' => 'receita_medica', 'text' => 'RECEITA MÉDICA'], ]); } public static function getModelData() { $now = Carbon::now()->format('d/m/Y'); return [ 'periodo' => [ 'start' => $now, 'end' => $now, ], 'unidade_id' => null, 'infraestrutura_id' => null, 'profissional_id' => null, 'tipo_documento' => null, ]; } public static function getPrintExportData() { $resultado = self::index(); $itens = $resultado['documentos']; $itens->each(function ($item) { $item->data_hora = (new Carbon($item->data_hora))->format('d/m/Y H:i'); }); $unidade = Unidade::find(request()->unidade_id); $infraestrutura = Infraestrutura::find(request()->infraestrutura_id); $profissional = Usuario::find(request()->profissional_id); $tipo = self::getTiposDocumento()->firstWhere('value', request()->tipo_documento); return [ 'inicio' => request()->periodo['start'], 'fim' => request()->periodo['end'], 'unidade' => $unidade->nome_fantasia ?? 'Todas', 'infraestrutura' => $infraestrutura->nome ?? 'Todas', 'profissional' => $profissional->cidadao->nome ?? 'Todos', 'tipo' => $tipo['text'] ?? 'Todos', 'colunas' => collect(request()->selectedCols), 'itens' => $itens, ]; } }