DB::table('atencao_basica_atendimento_domiciliar_atendimento') ->select([ DB::raw("'Atendimento domiciliar' AS atendimento_tipo"), 'atencao_basica_atendimento_domiciliar_atendimento.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_atendimento_domiciliar.data, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_atendimento_domiciliar_atendimento.latitude', 'atencao_basica_atendimento_domiciliar_atendimento.longitude', ]) ->join('atencao_basica_atendimento_domiciliar', 'atencao_basica_atendimento_domiciliar.id', 'atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_atendimento_domiciliar_atendimento.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_atendimento_domiciliar.ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_atendimento_domiciliar.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.latitude') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.longitude') ->whereBetween('atencao_basica_atendimento_domiciliar.data', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_atendimento_domiciliar.ocupacao_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_atendimento_domiciliar.usuario_id', $params->usuario_id)); $atendimentoIndividual = fn () => DB::table('atencao_basica_atendimento_individual') ->select([ DB::raw("'Atendimento individual' AS atendimento_tipo"), 'atencao_basica_atendimento_individual.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_atendimento_individual.data_usuario_responsavel, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_atendimento_individual.latitude', 'atencao_basica_atendimento_individual.longitude', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_atendimento_individual.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_atendimento_individual.usuario_ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_atendimento_individual.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_atendimento_individual.latitude') ->whereNotNull('atencao_basica_atendimento_individual.longitude') ->whereBetween('atencao_basica_atendimento_individual.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_atendimento_individual.usuario_ocupacao_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_atendimento_individual.usuario_id', $params->usuario_id)); $avaliacaoElegibilidadeAdmissao = fn () => DB::table('atencao_basica_avaliacao') ->select([ DB::raw("'Avaliação de elegibilidade e admissão' AS atendimento_tipo"), 'atencao_basica_avaliacao.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_avaliacao.data, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_avaliacao.latitude', 'atencao_basica_avaliacao.longitude', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_avaliacao.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_avaliacao.ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_avaliacao.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_avaliacao.latitude') ->whereNotNull('atencao_basica_avaliacao.longitude') ->whereBetween('atencao_basica_avaliacao.data', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_avaliacao.ocupacao_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_avaliacao.usuario_id', $params->usuario_id)); $fichaComplementar = fn () => DB::table('atencao_basica_ficha_complementar') ->select([ DB::raw("'Ficha complementar' AS atendimento_tipo"), 'atencao_basica_ficha_complementar.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_ficha_complementar.data_atendimento, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_ficha_complementar.latitude', 'atencao_basica_ficha_complementar.longitude', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_ficha_complementar.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_ficha_complementar.cbo_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_ficha_complementar.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_ficha_complementar.latitude') ->whereNotNull('atencao_basica_ficha_complementar.longitude') ->whereBetween('atencao_basica_ficha_complementar.data_atendimento', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_ficha_complementar.cbo_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_ficha_complementar.usuario_id', $params->usuario_id)); $marcadorConsumoAlimentar = fn () => DB::table('atencao_basica_consumo_alimentar') ->select([ DB::raw("'Marcador de consumo alimentar' AS atendimento_tipo"), 'atencao_basica_consumo_alimentar.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_consumo_alimentar.data_atendimento, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_consumo_alimentar.latitude', 'atencao_basica_consumo_alimentar.longitude', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_consumo_alimentar.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_consumo_alimentar.cbo_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_consumo_alimentar.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_consumo_alimentar.latitude') ->whereNotNull('atencao_basica_consumo_alimentar.longitude') ->whereBetween('atencao_basica_consumo_alimentar.data_atendimento', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_consumo_alimentar.cbo_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_consumo_alimentar.usuario_id', $params->usuario_id)); $procedimentos = fn () => DB::table('atencao_basica_procedimento_atendimento') ->select([ DB::raw("'Procedimento' AS atendimento_tipo"), 'atencao_basica_procedimento_atendimento.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_procedimento.data_usuario_responsavel, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_procedimento_atendimento.latitude', 'atencao_basica_procedimento_atendimento.longitude', ]) ->join('atencao_basica_procedimento', 'atencao_basica_procedimento.id', 'atencao_basica_procedimento_atendimento.procedimento_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_procedimento_atendimento.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_procedimento.ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_procedimento.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_procedimento_atendimento.latitude') ->whereNotNull('atencao_basica_procedimento_atendimento.longitude') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_procedimento.ocupacao_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_procedimento.usuario_id', $params->usuario_id)); $visitaDomiciliar = fn () => DB::table('atencao_basica_visita_domiciliar') ->select([ DB::raw("'Visita domiciliar' AS atendimento_tipo"), 'atencao_basica_visita_domiciliar.id', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(" CONCAT_WS(' - ', CONCAT( cadastro_logradouro_tipo.descricao, ' ', cadastro_logradouro.nome, ', ', COALESCE(cadastro_endereco.numero, 'S/N') ), NULLIF(cadastro_endereco.complemento, ''), cadastro_bairro.nome, CONCAT( cadastro_municipio.nome, '/', cadastro_estado.uf ), cadastro_pais.nome ) AS paciente_endereco "), 'sigtap.ocupacao.id AS ocupacao_id', 'sigtap.ocupacao.nome AS ocupacao_nome', 'cadastro_usuario.id AS usuario_id', 'cadastro_cidadao_usuario.nome AS usuario_nome', DB::raw("DATE_FORMAT(atencao_basica_visita_domiciliar.data_usuario_responsavel, '%d/%m/%Y') AS data_atendimento"), 'atencao_basica_visita_domiciliar.latitude', 'atencao_basica_visita_domiciliar.longitude', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_visita_domiciliar.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('sigtap.ocupacao', 'ocupacao.id', 'atencao_basica_visita_domiciliar.usuario_ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_visita_domiciliar.usuario_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao_paciente.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('intranet.cadastro_pais', 'cadastro_pais.id', 'cadastro_estado.pais_id') ->whereNotNull('atencao_basica_visita_domiciliar.latitude') ->whereNotNull('atencao_basica_visita_domiciliar.longitude') ->whereBetween('atencao_basica_visita_domiciliar.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_visita_domiciliar.usuario_ocupacao_id', $params->ocupacao_id)) ->when($params->usuario_id, fn ($q) => $q->where('atencao_basica_visita_domiciliar.usuario_id', $params->usuario_id)); switch ($params->atendimento_tipo) { case 'atendimento_domiciliar': return $atendimentoDomiciliar()->get(); case 'atendimento_individual': return $atendimentoIndividual()->get(); case 'avaliacao_elegibilidade_admissao': return $avaliacaoElegibilidadeAdmissao()->get(); case 'ficha_complementar': return $fichaComplementar()->get(); case 'marcador_consumo_alimentar': return $marcadorConsumoAlimentar()->get(); case 'procedimento': return $procedimentos()->get(); case 'visita_domiciliar': return $visitaDomiciliar()->get(); default: return $atendimentoDomiciliar() ->unionAll($atendimentoIndividual()) ->unionAll($avaliacaoElegibilidadeAdmissao()) ->unionAll($fichaComplementar()) ->unionAll($marcadorConsumoAlimentar()) ->unionAll($procedimentos()) ->unionAll($visitaDomiciliar()) ->get(); } } public static function create() { return [ 'form' => [ 'atendimento_tipos' => [], 'ocupacoes' => [], 'usuarios' => [], ], 'model' => [ 'periodo' => ['start' => null, 'end' => null], 'atendimento_tipo' => null, 'ocupacao_id' => null, 'usuario_id' => null, ], ]; } public static function list() { $params = self::getParams(); switch (request()->listar) { case 'atendimento-tipos': { return [ 'atendimento_tipos' => self::getAtendimentoTipos($params), 'ocupacoes' => self::getOcupacoes($params), 'usuarios' => self::getUsuarios($params), ]; } case 'ocupacoes': { return [ 'ocupacoes' => self::getOcupacoes($params), 'usuarios' => self::getUsuarios($params), ]; } case 'usuarios': { return [ 'usuarios' => self::getUsuarios($params), ]; } } } private static function getParams() { return (object) [ 'periodo' => [ 'start' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['end'])->setTime(23, 59, 59) ], 'atendimento_tipo' => request()->get('atendimento_tipo'), 'ocupacao_id' => request()->get('ocupacao_id'), 'usuario_id' => request()->get('usuario_id'), ]; } private static function getAtendimentoTipos($params) { $tipos = collect(); $atendimentoDomiciliar = DB::table('atencao_basica_atendimento_domiciliar_atendimento') ->join('atencao_basica_atendimento_domiciliar', 'atencao_basica_atendimento_domiciliar.id', 'atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.latitude') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.longitude') ->whereBetween('atencao_basica_atendimento_domiciliar.data', $params->periodo) ->exists(); $atendimentoIndividual = DB::table('atencao_basica_atendimento_individual') ->whereNotNull('atencao_basica_atendimento_individual.latitude') ->whereNotNull('atencao_basica_atendimento_individual.longitude') ->whereBetween('atencao_basica_atendimento_individual.data_usuario_responsavel', $params->periodo) ->exists(); $avaliacaoElegibilidadeAdmissao = DB::table('atencao_basica_avaliacao') ->whereNotNull('atencao_basica_avaliacao.latitude') ->whereNotNull('atencao_basica_avaliacao.longitude') ->whereBetween('atencao_basica_avaliacao.data', $params->periodo) ->exists(); $fichaComplementar = DB::table('atencao_basica_ficha_complementar') ->whereNotNull('atencao_basica_ficha_complementar.latitude') ->whereNotNull('atencao_basica_ficha_complementar.longitude') ->whereBetween('atencao_basica_ficha_complementar.data_atendimento', $params->periodo) ->exists(); $marcadorConsumoAlimentar = DB::table('atencao_basica_consumo_alimentar') ->whereNotNull('atencao_basica_consumo_alimentar.latitude') ->whereNotNull('atencao_basica_consumo_alimentar.longitude') ->whereBetween('atencao_basica_consumo_alimentar.data_atendimento', $params->periodo) ->exists(); $procedimentos = DB::table('atencao_basica_procedimento_atendimento') ->join('atencao_basica_procedimento', 'atencao_basica_procedimento.id', 'atencao_basica_procedimento_atendimento.procedimento_id') ->whereNotNull('atencao_basica_procedimento_atendimento.latitude') ->whereNotNull('atencao_basica_procedimento_atendimento.longitude') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $params->periodo) ->exists(); $visitaDomiciliar = DB::table('atencao_basica_visita_domiciliar') ->whereNotNull('atencao_basica_visita_domiciliar.latitude') ->whereNotNull('atencao_basica_visita_domiciliar.longitude') ->whereBetween('atencao_basica_visita_domiciliar.data_usuario_responsavel', $params->periodo) ->exists(); if ($atendimentoDomiciliar) { $tipos->push([ 'value' => 'atendimento_domiciliar', 'text' => 'Atendimento domiciliar' ]); } if ($atendimentoIndividual) { $tipos->push([ 'value' => 'atendimento_individual', 'text' => 'Atendimento individual' ]); } if ($avaliacaoElegibilidadeAdmissao) { $tipos->push([ 'value' => 'avaliacao_elegibilidade_admissao', 'text' => 'Avaliaçăo de elegibilidade e admissăo' ]); } if ($fichaComplementar) { $tipos->push([ 'value' => 'ficha_complementar', 'text' => 'Ficha complementar' ]); } if ($marcadorConsumoAlimentar) { $tipos->push([ 'value' => 'marcador_consumo_alimentar', 'text' => 'Marcador de consumo alimentar' ]); } if ($procedimentos) { $tipos->push([ 'value' => 'procedimento', 'text' => 'Procedimentos' ]); } if ($visitaDomiciliar) { $tipos->push([ 'value' => 'visita_domiciliar', 'text' => 'Visita domiciliar' ]); } return $tipos; } private static function getOcupacoes($params) { return DB::table('sigtap.ocupacao') ->select([ 'ocupacao.id', 'ocupacao.nome', ]) ->when(in_array($params->atendimento_tipo, ['atendimento_domiciliar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_atendimento_domiciliar_atendimento') ->join('atencao_basica_atendimento_domiciliar', 'atencao_basica_atendimento_domiciliar.id', 'atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.latitude') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.longitude') ->whereBetween('atencao_basica_atendimento_domiciliar.data', $params->periodo) ->whereColumn('atencao_basica_atendimento_domiciliar.ocupacao_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['atendimento_individual', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_atendimento_individual') ->whereNotNull('atencao_basica_atendimento_individual.latitude') ->whereNotNull('atencao_basica_atendimento_individual.longitude') ->whereBetween('atencao_basica_atendimento_individual.data_usuario_responsavel', $params->periodo) ->whereColumn('atencao_basica_atendimento_individual.usuario_ocupacao_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['avaliacao_elegibilidade_admissao', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_avaliacao') ->whereNotNull('atencao_basica_avaliacao.latitude') ->whereNotNull('atencao_basica_avaliacao.longitude') ->whereBetween('atencao_basica_avaliacao.data', $params->periodo) ->whereColumn('atencao_basica_avaliacao.ocupacao_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['ficha_complementar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_ficha_complementar') ->whereNotNull('atencao_basica_ficha_complementar.latitude') ->whereNotNull('atencao_basica_ficha_complementar.longitude') ->whereBetween('atencao_basica_ficha_complementar.data_atendimento', $params->periodo) ->whereColumn('atencao_basica_ficha_complementar.cbo_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['marcador_consumo_alimentar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_consumo_alimentar') ->whereNotNull('atencao_basica_consumo_alimentar.latitude') ->whereNotNull('atencao_basica_consumo_alimentar.longitude') ->whereBetween('atencao_basica_consumo_alimentar.data_atendimento', $params->periodo) ->whereColumn('atencao_basica_consumo_alimentar.cbo_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['procedimento', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_procedimento_atendimento') ->join('atencao_basica_procedimento', 'atencao_basica_procedimento.id', 'atencao_basica_procedimento_atendimento.procedimento_id') ->whereNotNull('atencao_basica_procedimento_atendimento.latitude') ->whereNotNull('atencao_basica_procedimento_atendimento.longitude') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $params->periodo) ->whereColumn('atencao_basica_procedimento.ocupacao_id', 'ocupacao.id') )) ->when(in_array($params->atendimento_tipo, ['visita_domiciliar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_visita_domiciliar') ->whereNotNull('atencao_basica_visita_domiciliar.latitude') ->whereNotNull('atencao_basica_visita_domiciliar.longitude') ->whereBetween('atencao_basica_visita_domiciliar.data_usuario_responsavel', $params->periodo) ->whereColumn('atencao_basica_visita_domiciliar.usuario_ocupacao_id', 'ocupacao.id') )) ->orderBy('ocupacao.nome') ->get(); } private static function getUsuarios($params) { return DB::table('cadastro_usuario') ->select([ 'cadastro_usuario.id', 'cadastro_cidadao.nome', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->when(in_array($params->atendimento_tipo, ['atendimento_domiciliar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_atendimento_domiciliar_atendimento') ->join('atencao_basica_atendimento_domiciliar', 'atencao_basica_atendimento_domiciliar.id', 'atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.latitude') ->whereNotNull('atencao_basica_atendimento_domiciliar_atendimento.longitude') ->whereBetween('atencao_basica_atendimento_domiciliar.data', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_atendimento_domiciliar.ocupacao_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_atendimento_domiciliar.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['atendimento_individual', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_atendimento_individual') ->whereNotNull('atencao_basica_atendimento_individual.latitude') ->whereNotNull('atencao_basica_atendimento_individual.longitude') ->whereBetween('atencao_basica_atendimento_individual.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_atendimento_individual.usuario_ocupacao_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_atendimento_individual.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['avaliacao_elegibilidade_admissao', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_avaliacao') ->whereNotNull('atencao_basica_avaliacao.latitude') ->whereNotNull('atencao_basica_avaliacao.longitude') ->whereBetween('atencao_basica_avaliacao.data', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_avaliacao.ocupacao_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_avaliacao.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['ficha_complementar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_ficha_complementar') ->whereNotNull('atencao_basica_ficha_complementar.latitude') ->whereNotNull('atencao_basica_ficha_complementar.longitude') ->whereBetween('atencao_basica_ficha_complementar.data_atendimento', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_ficha_complementar.cbo_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_ficha_complementar.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['marcador_consumo_alimentar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_consumo_alimentar') ->whereNotNull('atencao_basica_consumo_alimentar.latitude') ->whereNotNull('atencao_basica_consumo_alimentar.longitude') ->whereBetween('atencao_basica_consumo_alimentar.data_atendimento', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_consumo_alimentar.cbo_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_consumo_alimentar.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['procedimento', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_procedimento_atendimento') ->join('atencao_basica_procedimento', 'atencao_basica_procedimento.id', 'atencao_basica_procedimento_atendimento.procedimento_id') ->whereNotNull('atencao_basica_procedimento_atendimento.latitude') ->whereNotNull('atencao_basica_procedimento_atendimento.longitude') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_procedimento.ocupacao_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_procedimento.usuario_id', 'cadastro_usuario.id') )) ->when(in_array($params->atendimento_tipo, ['visita_domiciliar', null]), fn ($q) => $q->orWhereExists(fn ($q) => $q->select(DB::raw(1)) ->from('atencao_basica_visita_domiciliar') ->whereNotNull('atencao_basica_visita_domiciliar.latitude') ->whereNotNull('atencao_basica_visita_domiciliar.longitude') ->whereBetween('atencao_basica_visita_domiciliar.data_usuario_responsavel', $params->periodo) ->when($params->ocupacao_id, fn ($q) => $q->where('atencao_basica_visita_domiciliar.usuario_ocupacao_id', $params->ocupacao_id)) ->whereColumn('atencao_basica_visita_domiciliar.usuario_id', 'cadastro_usuario.id') )) ->orderBy('cadastro_cidadao.nome') ->get(); } }