self::getFormData(), 'model' => self::getModelData(), ]; } public static function store($request) { self::validate($request); $temporaryPath = 'imunizacao' . DIRECTORY_SEPARATOR . 'exportacao' . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR . $request->header('customer'); try { Storage::deleteDirectory($temporaryPath); foreach (self::getPacientes($request) as $value) { $arquivo = 'P' . $value['cnes'] . '.DAT'; foreach($value['pacientes'] as $value) { Storage::disk('local')->append($temporaryPath . DIRECTORY_SEPARATOR . $arquivo, implode(', ', $value)); } } foreach (self::getRegistrosVacinacao($request) as $value) { $arquivo = 'L' . $value['cnes'] . '.DAT'; foreach($value['registros_vacinacao'] as $value) { Storage::disk('local')->append($temporaryPath . DIRECTORY_SEPARATOR . $arquivo, implode(', ', $value)); } } foreach (self::getObservacoesRegistrosVacinacao($request) as $value) { $arquivo = 'O' . $value['cnes'] . '.DAT'; foreach($value['observacoes_registros_vacinacao'] as $value) { Storage::disk('local')->append($temporaryPath . DIRECTORY_SEPARATOR . $arquivo, implode(', ', $value)); } } foreach (self::getBoletinsMovimentacao($request) as $value) { $arquivo = 'B' . $value['cnes'] . '.DAT'; foreach($value['boletins_movimentacao'] as $value) { Storage::disk('local')->append($temporaryPath . DIRECTORY_SEPARATOR . $arquivo, implode(', ', $value)); } } foreach (self::getItensBoletinsMovimentacao($request) as $value) { $arquivo = 'I' . $value['cnes'] . '.DAT'; foreach($value['itens_boletins_movimentacao'] as $value) { Storage::disk('local')->append($temporaryPath . DIRECTORY_SEPARATOR . $arquivo, implode(', ', $value)); } } $arquivos = []; foreach (Storage::disk('local')->files($temporaryPath) as $value) { $arquivos[] = [ 'path' => storage_path('app' . DIRECTORY_SEPARATOR . $value), 'name' => basename($value), ]; } $definitivePath = 'imunizacao' . DIRECTORY_SEPARATOR . 'exportacao' . DIRECTORY_SEPARATOR . $request->header('customer'); $arquivo = 'M-' . Str::substr(self::getCliente()->ibge, 0, 6) . '-' . $request['ano'] . $request['mes'] . '-' . Carbon::now()->format('dmYHis') . '-RKM.PNI'; ZipUtil::compress($arquivos, storage_path('app' . DIRECTORY_SEPARATOR . $definitivePath . DIRECTORY_SEPARATOR . $arquivo)); Storage::deleteDirectory($temporaryPath); if (count($arquivos) > 0) { DB::beginTransaction(); $exportacao = Exportacao::create([ 'usuario_id' => self::getUsuarioLogado()->id, 'mes' => $request['mes'], 'ano' => $request['ano'], 'arquivo' => $arquivo, ]); DB::commit(); return $exportacao->fresh(); } else { return false; } } catch (Exception $_) { DB::rollBack(); dd($_); } } public static function datatable() { return DB::table('imunizacao_exportacao') ->select([ 'imunizacao_exportacao.id', 'cadastro_cidadao.nome AS usuario_nome', DB::raw("DATE_FORMAT(imunizacao_exportacao.created_at, '%d/%m/%Y %H:%i') AS data_hora_exportacao"), 'imunizacao_exportacao.mes', 'imunizacao_exportacao.ano', ]) ->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_exportacao.usuario_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id'); } public static function list() { switch (request()->get('listar')) { case 'meses': return self::getMeses(request()->get('ano')); break; default: return []; break; } } public static function download($id) { $exportacao = Exportacao::findOrFail($id); return [ 'nome' => $exportacao->arquivo, 'arquivo' => Storage::path('imunizacao' . DIRECTORY_SEPARATOR . 'exportacao' . DIRECTORY_SEPARATOR . request()->header('customer') . DIRECTORY_SEPARATOR . $exportacao->arquivo), ]; } private static function validate($request) { return $request->validate([ 'mes' => [ 'required', 'integer', ], 'ano' => [ 'required', 'integer', ], ]); } private static function getFormData() { return [ 'meses' => [], 'anos' => self::getAnos(), ]; } private static function getModelData() { return [ 'mes' => null, 'ano' => null, ]; } private static function getUsuarioLogado() { return DB::table('cadastro_usuario') ->select([ 'cadastro_usuario.id', ]) ->join('cadastro_lotacao', 'cadastro_lotacao.usuario_id', 'cadastro_usuario.id') ->where('cadastro_lotacao.id', auth()->payload()->get('lotacao_id')) ->first(); } private static function getMeses($ano) { return DB::table('imunizacao_registro_aplicacao') ->select([ DB::raw('EXTRACT(MONTH FROM imunizacao_registro_aplicacao.data_aplicacao) AS mes') ]) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $ano) ->distinct() ->orderByRaw('EXTRACT(MONTH FROM imunizacao_registro_aplicacao.data_aplicacao)') ->get(); } private static function getAnos() { return DB::table('imunizacao_registro_aplicacao') ->select([ DB::raw('EXTRACT(YEAR FROM imunizacao_registro_aplicacao.data_aplicacao) AS ano') ]) ->distinct() ->get(); } private static function getCliente() { return DB::table('intranet.cadastro_cliente') ->select([ 'cadastro_municipio.ibge', ]) ->join('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_cliente.municipio_id') ->where('cadastro_cliente.link', request()->header('customer')) ->first(); } private static function getParametrizacaoExportacao() { return DB::table('imunizacao_parametrizacao_exportacao') ->select([ 'codigo_sistema', 'sigla_sistema', 'senha_arquivo', ]) ->first(); } private static function getPacientes($request) { $items = []; $parametrizacaoExportacao = self::getParametrizacaoExportacao(); DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id AS sala_vacinacao_id', 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereNotNull('cadastro_unidade.cnes') ->whereRaw('TRIM(cadastro_unidade.cnes)', '') ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_registro_atualizacao') ->whereColumn('imunizacao_registro_atualizacao.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereMonth('imunizacao_registro_atualizacao.data_atualizacao', $request['mes']) ->whereYear('imunizacao_registro_atualizacao.data_atualizacao', $request['ano']); }) ->orWhereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->whereColumn('imunizacao_saida.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']); }) ->get() ->each(function($query) use ($request, $parametrizacaoExportacao, &$items) { $registrosAtualizacao = DB::table('imunizacao_registro_atualizacao') ->select([ 'cadastro_paciente.id AS paciente_id', 'cadastro_unidade.cnes AS unidade_cnes', 'cadastro_cidadao.cns AS cidadao_cns', 'cadastro_cidadao.nome AS cidadao_nome', 'cadastro_cidadao.nome_mae AS cidadao_nome_mae', 'cadastro_cidadao.sexo_id AS cidadao_sexo_id', DB::raw('DATE_FORMAT(cadastro_cidadao.data_nascimento, "%m/%d/%Y 00:00:00") AS cidadao_data_nascimento'), 'cadastro_raca_cor.codigo AS raca_cor_codigo', 'cadastro_endereco.zona_id AS endereco_zona_id', 'cadastro_pais.codigo AS pais_codigo', 'cadastro_municipio.id AS municipio_id', 'cadastro_bairro.nome AS bairro_nome', 'cadastro_logradouro.nome AS logradouro_nome', 'cadastro_endereco.numero AS logradouro_numero', 'cadastro_endereco.complemento AS endereco_complemento', 'cadastro_logradouro.cep AS logradouro_cep', DB::raw(' ( SELECT numero FROM cadastro_cidadao_telefone WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id AND cadastro_cidadao_telefone.principal = TRUE LIMIT 1 ) AS cidadao_telefone '), 'cadastro_paciente.email AS paciente_email', 'cadastro_etnia_indigena.codigo AS etnia_indigena_codigo', 'cadastro_bairro.id AS bairro_id', 'cadastro_cidadao.nome_social AS cidadao_nome_social', 'cadastro_pais_nascimento.codigo AS pais_nascimento_codigo', 'cadastro_municipio_nascimento.id AS municipio_nascimento_id', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_paciente.unidade_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_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('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') ->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id') ->leftJoin('cadastro_etnia_indigena', 'cadastro_etnia_indigena.id', 'cadastro_cidadao.etnia_indigena_id') ->leftJoin('intranet.cadastro_municipio AS cadastro_municipio_nascimento', 'cadastro_municipio_nascimento.id', 'cadastro_cidadao.municipio_nascimento_id') ->leftJoin('intranet.cadastro_pais AS cadastro_pais_nascimento', 'cadastro_pais_nascimento.id', 'cadastro_cidadao.pais_nascimento_id') ->where('imunizacao_registro_atualizacao.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereMonth('imunizacao_registro_atualizacao.data_atualizacao', $request['mes']) ->whereYear('imunizacao_registro_atualizacao.data_atualizacao', $request['ano']) ->distinct(); $registrosAplicacao = DB::table('imunizacao_registro_aplicacao') ->select([ 'cadastro_paciente.id AS paciente_id', 'cadastro_unidade.cnes AS unidade_cnes', 'cadastro_cidadao.cns AS cidadao_cns', 'cadastro_cidadao.nome AS cidadao_nome', 'cadastro_cidadao.nome_mae AS cidadao_nome_mae', 'cadastro_cidadao.sexo_id AS cidadao_sexo_id', DB::raw('DATE_FORMAT(cadastro_cidadao.data_nascimento, "%m/%d/%Y 00:00:00") AS cidadao_data_nascimento'), 'cadastro_raca_cor.codigo AS raca_cor_codigo', 'cadastro_endereco.zona_id AS endereco_zona_id', 'cadastro_pais.codigo AS pais_codigo', 'cadastro_municipio.id AS municipio_id', 'cadastro_bairro.nome AS bairro_nome', 'cadastro_logradouro.nome AS logradouro_nome', 'cadastro_endereco.numero AS logradouro_numero', 'cadastro_endereco.complemento AS endereco_complemento', 'cadastro_logradouro.cep AS logradouro_cep', DB::raw(' ( SELECT numero FROM cadastro_cidadao_telefone WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id AND cadastro_cidadao_telefone.principal = TRUE LIMIT 1 ) AS cidadao_telefone '), 'cadastro_paciente.email AS paciente_email', 'cadastro_etnia_indigena.codigo AS etnia_indigena_codigo', 'cadastro_bairro.id AS bairro_id', 'cadastro_cidadao.nome_social AS cidadao_nome_social', 'cadastro_pais_nascimento.codigo AS pais_nascimento_codigo', 'cadastro_municipio_nascimento.id AS municipio_nascimento_id', ]) ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_paciente.unidade_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_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('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') ->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id') ->leftJoin('cadastro_etnia_indigena', 'cadastro_etnia_indigena.id', 'cadastro_cidadao.etnia_indigena_id') ->leftJoin('intranet.cadastro_municipio AS cadastro_municipio_nascimento', 'cadastro_municipio_nascimento.id', 'cadastro_cidadao.municipio_nascimento_id') ->leftJoin('intranet.cadastro_pais AS cadastro_pais_nascimento', 'cadastro_pais_nascimento.id', 'cadastro_cidadao.pais_nascimento_id') ->where('imunizacao_saida.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']) ->union($registrosAtualizacao) ->distinct() ->get() ->map(function($query) use ($parametrizacaoExportacao) { return [ 'CO_SISTEMA_ORIGEM' => $parametrizacaoExportacao->codigo_sistema, 'CO_CHAVE_SISTEMA_ORIGEM' => '"' . Str::substr($query->paciente_id, 0, 50) . '"', 'CO_CNES_CADASTRO' => '"' . Str::substr($query->unidade_cnes, 0, 7) . '"', 'CO_NUMERO_CARTAO' => Str::substr($query->cidadao_cns, 0, 15), 'NO_PACIENTE' => '"' . Str::substr($query->cidadao_nome, 0, 70) . '"', 'NO_MAE_PACIENTE' => '"' . Str::substr($query->cidadao_nome_mae, 0, 70) . '"', 'CO_SEXO_PACIENTE' => '"' . Str::substr($query->cidadao_sexo_id === Sexo::FEMININO ? 'F' : 'M', 0, 1) . '"', 'DT_NASCIMENTO' => $query->cidadao_data_nascimento, 'CO_RACA' => Str::substr($query->raca_cor_codigo, 0, 2), // Verificar. 'SG_ZONA' => Str::substr($query->endereco_zona_id === Zona::RURAL ? 'R' : 'U', 0, 1), 'CO_PAIS' => Str::substr($query->pais_codigo, 0, 3), // Verificar. 'CO_MUNICIPIO' => Str::substr($query->municipio_id, 0, 6), // Verificar. 'NO_BAIRRO' => '"' . Str::substr($query->bairro_nome, 0, 72) . '"', 'DS_ENDERECO' => '"' . Str::substr($query->logradouro_nome, 0, 60) . '"', 'NU_ENDERECO' => Str::substr($query->logradouro_numero, 0, 10), 'DS_COMPLEMENTO' => '"' . Str::substr($query->endereco_complemento, 0, 20) . '"', 'NU_CEP' => Str::substr($query->logradouro_cep, 0, 8), 'NU_TELEFONE' => Str::substr($query->cidadao_telefone, 0, 10), 'NO_EMAIL' => '"' . Str::substr($query->paciente_email, 0, 50) . '"', 'CO_ETINIA' => $query->etnia_indigena_codigo, // Verificar. 'CO_BAIRRO' => $query->bairro_id, // Verificar. 'CO_MUNICIPIO_BAIRRO' => Str::substr($query->municipio_id, 0, 6), // Verificar. 'CO_TIPO_DOCUMENTO' => null, 'NU_DOCUMENTO' => Str::substr(null, 0, 25), 'CO_TIPO_SAIDA_PACIENTE' => null, 'NO_SOCIAL' => '"' . Str::substr($query->cidadao_nome_social, 0, 70) . '"', 'CO_PAIS_NASCIMENTO' => $query->pais_nascimento_codigo, // Verificar. 'CO_MUNICIPIO_NASCIMENTO' => $query->municipio_nascimento_id, // Verificar. 'FL_EXCLUSAO' => '"' . Str::substr(null, 0, 1) . '"', 'DT_EXCLUSAO' => null, ]; }); $items[] = [ 'cnes' => $query->unidade_cnes, 'pacientes' => $registrosAplicacao, ]; }); return $items; } private static function getRegistrosVacinacao($request) { $items = []; $parametrizacaoExportacao = self::getParametrizacaoExportacao(); DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id AS sala_vacinacao_id', 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereNotNull('cadastro_unidade.cnes') ->whereRaw('TRIM(cadastro_unidade.cnes)', '') ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_registro_atualizacao') ->whereColumn('imunizacao_registro_atualizacao.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereMonth('imunizacao_registro_atualizacao.data_atualizacao', $request['mes']) ->whereYear('imunizacao_registro_atualizacao.data_atualizacao', $request['ano']); }) ->orWhereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->whereColumn('imunizacao_saida.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']); }) ->get() ->each(function($query) use ($request, $parametrizacaoExportacao, &$items) { $registrosAtualizacao = DB::table('imunizacao_registro_atualizacao') ->select([ 'imunizacao_registro_atualizacao.id AS registro_vacinacao_id', 'cadastro_unidade_sala_vacinacao.cnes AS unidade_sala_vacinacao_cnes', 'cadastro_paciente.id AS paciente_id', 'cadastro_unidade_paciente.cnes AS unidade_paciente_cnes', 'imunizacao_registro_atualizacao.vacina_id', 'imunizacao_registro_atualizacao.dose_id', DB::raw('NULL AS imunizacao_advertida'), DB::raw('DATE_FORMAT(imunizacao_registro_atualizacao.data_atualizacao, "%m/%d/%Y 00:00:00") AS data_vacinacao'), 'imunizacao_registro_atualizacao.lote', 'cadastro_municipio.id AS municipio_id', 'cadastro_bairro.nome AS bairro_nome', 'cadastro_endereco.zona_id AS endereco_zona_id', 'imunizacao_registro_atualizacao.grupo_atendimento_id', DB::raw('NULL AS comunicante_hanseniase'), DB::raw('NULL AS gestante'), DB::raw('NULL AS produtor_id'), 'imunizacao_registro_atualizacao.estrategia_id', DB::raw('NULL AS motivo_id'), 'cadastro_cidadao_usuario.cns AS cidadao_usuario_cns', DB::raw('NULL AS data_aprazamento'), DB::raw('NULL AS puerpera'), ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_atualizacao.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('cadastro_unidade AS cadastro_unidade_paciente', 'cadastro_unidade_paciente.id', 'cadastro_paciente.unidade_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_atualizacao.aplicador_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_registro_atualizacao.sala_vacinacao_id') ->join('cadastro_infraestrutura AS cadastro_infraestrutura_sala_vacinacao', 'cadastro_infraestrutura_sala_vacinacao.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade AS cadastro_unidade_sala_vacinacao', 'cadastro_unidade_sala_vacinacao.id', 'cadastro_infraestrutura_sala_vacinacao.unidade_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('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id') ->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id') ->where('imunizacao_registro_atualizacao.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereMonth('imunizacao_registro_atualizacao.data_atualizacao', $request['mes']) ->whereYear('imunizacao_registro_atualizacao.data_atualizacao', $request['ano']) ->distinct(); $registrosAplicacao = DB::table('imunizacao_registro_aplicacao') ->select([ 'imunizacao_registro_aplicacao.id AS registro_vacinacao_id', 'cadastro_unidade_sala_vacinacao.cnes AS unidade_sala_vacinacao_cnes', 'cadastro_paciente.id AS paciente_id', 'cadastro_unidade_paciente.cnes AS unidade_paciente_cnes', 'imunizacao_entrada_vacina.vacina_id', 'imunizacao_registro_aplicacao.dose_id', 'imunizacao_registro_aplicacao.imunizacao_advertida', DB::raw('DATE_FORMAT(imunizacao_registro_aplicacao.data_aplicacao, "%m/%d/%Y 00:00:00") AS data_vacinacao'), 'imunizacao_entrada_vacina.lote', 'cadastro_municipio.id AS municipio_id', 'cadastro_bairro.nome AS bairro_nome', 'cadastro_endereco.zona_id AS endereco_zona_id', 'imunizacao_registro_aplicacao.grupo_atendimento_id', 'imunizacao_registro_aplicacao.comunicante_hanseniase', 'imunizacao_registro_aplicacao.gestante', 'imunizacao_entrada_vacina.produtor_id', 'imunizacao_registro_aplicacao.estrategia_id', 'imunizacao_registro_aplicacao.cid_id', 'cadastro_cidadao_usuario.cns AS cidadao_usuario_cns', DB::raw(' ( SELECT DATE_FORMAT(imunizacao_registro_aprazamento.data_aprazamento, "%m/%d/%Y 00:00:00") FROM imunizacao_registro_aprazamento WHERE imunizacao_registro_aprazamento.registro_aplicacao_id = imunizacao_registro_aplicacao.id LIMIT 1 ) AS data_aprazamento '), 'imunizacao_registro_aplicacao.puerpera', ]) ->join('cadastro_paciente', 'cadastro_paciente.id', 'imunizacao_registro_aplicacao.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->join('cadastro_unidade AS cadastro_unidade_paciente', 'cadastro_unidade_paciente.id', 'cadastro_paciente.unidade_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'imunizacao_registro_aplicacao.aplicador_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_saida_vacina.entrada_vacina_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_saida.sala_vacinacao_id') ->join('cadastro_infraestrutura AS cadastro_infraestrutura_sala_vacinacao', 'cadastro_infraestrutura_sala_vacinacao.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade AS cadastro_unidade_sala_vacinacao', 'cadastro_unidade_sala_vacinacao.id', 'cadastro_infraestrutura_sala_vacinacao.unidade_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('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id') ->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id') ->where('imunizacao_saida.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']) ->union($registrosAtualizacao) ->distinct() ->get() ->map(function($query) use ($parametrizacaoExportacao) { return [ 'CO_SISTEMA_ORIGEM' => $parametrizacaoExportacao->codigo_sistema, 'CO_CHAVE_SISTEMA_ORIGEM' => '"' . Str::substr($query->registro_vacinacao_id, 0, 50) . '"', 'CO_CNES_LANCAMENTO' => '"' . Str::substr($query->unidade_sala_vacinacao_cnes, 0, 7) . '"', 'CO_CNES_CADASTRO' => '"' . Str::substr($query->unidade_paciente_cnes, 0, 7) . '"', 'CO_CHAVE_PACIENTE' => '"' . Str::substr($query->paciente_id, 0, 50) . '"', 'CO_PRODUTO' => $query->vacina_id, 'CO_DOSE' => $query->dose_id, 'NU_DOSE_REPETIDA' => null, 'FL_INADVERTIDA' => '"' . Str::substr($query->imunizacao_advertida ? 'S' : 'N', 0, 1) . '"', 'DT_IMUNIZACAO' => '"' . $query->data_vacinacao . '"', 'NU_LOTE' => '"' . Str::substr($query->lote, 0, 30) . '"', 'CO_MUNICIPIO_PACIENTE' => '"' . Str::substr($query->municipio_id, 0, 6) . '"', 'NO_BAIRRO_PACIENTE' => '"' . Str::substr($query->bairro_nome, 0, 40) . '"', 'SG_ZONA' => '"' . Str::substr($query->endereco_zona_id, 0, 1) . '"', 'CO_GRUPO_ATENDIMENTO' => $query->grupo_atendimento_id, 'FL_COMUNICANTE_HANSENIASE' => '"' . Str::substr($query->comunicante_hanseniase ? 'S' : 'N', 0, 1) . '"', 'FL_GESTANTE' => '"' . Str::substr($query->gestante ? 'S' : 'N', 0, 1) . '"', 'CO_PRODUTOR' => $query->produtor_id, 'CO_ESTRATEGIA' => $query->estrategia_id, 'CO_MOTIVO_INDICACAO' => $query->cid_id, 'CO_CNS_PROFISSIONAL' => '"' . Str::substr($query->cidadao_usuario_cns, 0, 15) . '"', 'CO_CBOS_INDICADOR' => '"' . Str::substr(null, 0, 6) . '"', 'FL_ATUALIZACAO_CADERNETA' => '"' . Str::substr(null, 0, 1) . '"', 'DT_APRAZAMENTO' => '"' . $query->data_aprazamento . '"', 'FL_PUERPERA' => '"' . Str::substr($query->puerpera ? 'S' : 'N', 0, 1) . '"', 'FL_EXCLUSAO' => '"' . Str::substr(null, 0, 1) . '"', 'DT_EXCLUSAO' => null, ]; }); $items[] = [ 'cnes' => $query->unidade_cnes, 'registros_vacinacao' => $registrosAplicacao, ]; }); return $items; } private static function getObservacoesRegistrosVacinacao($request) { $items = []; $parametrizacaoExportacao = self::getParametrizacaoExportacao(); DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id AS sala_vacinacao_id', 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereNotNull('cadastro_unidade.cnes') ->whereRaw('TRIM(cadastro_unidade.cnes)', '') ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_registro_aplicacao') ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->whereColumn('imunizacao_saida.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']); }) ->get() ->each(function($query) use ($request, $parametrizacaoExportacao, &$items) { $registrosAplicacao = DB::table('imunizacao_registro_aplicacao') ->select([ 'imunizacao_registro_aplicacao.id AS registro_aplicacao_id', 'imunizacao_registro_aplicacao.observacao AS registro_aplicacao_observacao', ]) ->join('imunizacao_saida_vacina', 'imunizacao_saida_vacina.id', 'imunizacao_registro_aplicacao.saida_vacina_id') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->where('imunizacao_saida.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereMonth('imunizacao_registro_aplicacao.data_aplicacao', $request['mes']) ->whereYear('imunizacao_registro_aplicacao.data_aplicacao', $request['ano']) ->distinct() ->get() ->map(function($query) use ($parametrizacaoExportacao) { return [ 'CO_SISTEMA_ORIGEM' => $parametrizacaoExportacao->codigo_sistema, 'CO_CHAVE_SISTEMA_ORIGEM' => '"' . Str::substr($query->registro_aplicacao_id, 0, 50) . '"', 'DS_OBSERVACAO' => '"' . Str::substr($query->registro_aplicacao_observacao, 0, 5000) . '"', ]; }); $items[] = [ 'cnes' => $query->unidade_cnes, 'observacoes_registros_vacinacao' => $registrosAplicacao, ]; }); return $items; } private static function getBoletinsMovimentacao($request) { $items = []; $parametrizacaoExportacao = self::getParametrizacaoExportacao(); DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id AS sala_vacinacao_id', 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereNotNull('cadastro_unidade.cnes') ->whereRaw('TRIM(cadastro_unidade.cnes)', '') ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_entrada') ->whereColumn('imunizacao_entrada.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereYear('imunizacao_entrada.data_entrada', $request['ano']) ->whereMonth('imunizacao_entrada.data_entrada', $request['mes']); }) ->orWhereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_saida') ->whereColumn('imunizacao_saida.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereYear('imunizacao_saida.data_saida', $request['ano']) ->whereMonth('imunizacao_saida.data_saida', $request['mes']); }) ->get() ->each(function($query) use ($request, &$items, $parametrizacaoExportacao) { $boletinsMovimentacao = DB::table('imunizacao_entrada_vacina') ->select([ 'imunizacao_entrada_vacina.id AS movimentacao_id', DB::raw('EXTRACT(YEAR FROM imunizacao_entrada.data_entrada) AS movimentacao_ano'), DB::raw('EXTRACT(MONTH FROM imunizacao_entrada.data_entrada) AS movimentacao_mes'), 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->where('imunizacao_entrada.sala_vacinacao_id', $query->sala_vacinacao_id) ->whereYear('imunizacao_entrada.data_entrada', $request['ano']) ->whereMonth('imunizacao_entrada.data_entrada', $request['mes']) ->get() ->map(function($query) use ($parametrizacaoExportacao) { return [ 'CO_SISTEMA_ORIGEM' => $parametrizacaoExportacao->codigo_sistema, 'CO_CHAVE_SISTEMA_ORIGEM' => $query->movimentacao_id, 'CO_CNES' => $query->unidade_cnes, 'CO_ANO_APURACAO' => $query->movimentacao_ano, 'CO_MES_APURACAO' => $query->movimentacao_mes, ]; }); $items[] = [ 'cnes' => $query->unidade_cnes, 'boletins_movimentacao' => $boletinsMovimentacao, ]; }); return $items; } private static function getItensBoletinsMovimentacao($request) { $items = []; DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id AS sala_vacinacao_id', 'cadastro_unidade.cnes AS unidade_cnes', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereNotNull('cadastro_unidade.cnes') ->whereRaw('TRIM(cadastro_unidade.cnes)', '') ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_entrada') ->whereColumn('imunizacao_entrada.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereYear('imunizacao_entrada.data_entrada', $request['ano']) ->whereMonth('imunizacao_entrada.data_entrada', $request['mes']); }) ->orWhereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_saida') ->whereColumn('imunizacao_saida.sala_vacinacao_id', 'imunizacao_sala_vacinacao.id') ->whereYear('imunizacao_saida.data_saida', $request['ano']) ->whereMonth('imunizacao_saida.data_saida', $request['mes']); }) ->get() ->each(function($salaVacinacao) use ($request, &$items) { $itensBoletinsMovimentacao = DB::table('imunizacao_vacina_produtor_apresentacao') ->select([ 'cadastro_vacina.codigo AS vacina_codigo', 'imunizacao_apresentacao.codigo AS apresentacao_codigo', 'imunizacao_produtor.codigo AS produtor_codigo', DB::raw(" ( SELECT COALESCE(SUM(imunizacao_entrada_vacina.quantidade), 0) FROM imunizacao_entrada_vacina INNER JOIN imunizacao_entrada ON imunizacao_entrada.id = imunizacao_entrada_vacina.entrada_id WHERE imunizacao_entrada.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id ) AS quantidade_recebida "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::DISTRIBUICAO . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id ) AS quantidade_distribuida "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::APLICACAO . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id ) AS quantidade_utilizada "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::QUEBRA . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_quebra "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::FALTA_ENERGIA . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_falta_energia "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::FALHA_EQUIPAMENTO . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_falha_equipamento "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::VALIDADE_VENCIDA . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_validade_vencida "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::PROCEDIMENTO_INADEQUADO . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_procedimento_inadequado "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::OUTROS . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_outros "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::BAIXA . " AND imunizacao_saida.motivo_id = " . SaidaMotivo::PERDA_TRANSPORTE . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_perda_transporte "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina INNER JOIN imunizacao_saida ON imunizacao_saida.id = imunizacao_saida_vacina.saida_id INNER JOIN imunizacao_entrada_vacina ON imunizacao_entrada_vacina.id = imunizacao_saida_vacina.entrada_vacina_id WHERE imunizacao_saida.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_saida.tipo_id = " . SaidaTipo::INDISPONIBILIDADE . " AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id AND NOT EXISTS ( SELECT 1 FROM imunizacao_entrada_vacina AS iev WHERE iev.saida_vacina_id = imunizacao_saida_vacina.id ) ) AS quantidade_saldo_indisponivel "), DB::raw(" ( SELECT COALESCE(SUM(imunizacao_entrada_vacina.quantidade - ( SELECT COALESCE(SUM(imunizacao_saida_vacina.quantidade), 0) FROM imunizacao_saida_vacina WHERE imunizacao_saida_vacina.entrada_vacina_id = imunizacao_entrada_vacina.id )), 0) FROM imunizacao_entrada_vacina INNER JOIN imunizacao_entrada ON imunizacao_entrada.id = imunizacao_entrada_vacina.entrada_id WHERE imunizacao_entrada.sala_vacinacao_id = $salaVacinacao->sala_vacinacao_id AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id AND imunizacao_entrada_vacina.produtor_id = imunizacao_produtor.id AND imunizacao_entrada_vacina.apresentacao_id = imunizacao_apresentacao.id ) AS quantidade_saldo_disponivel "), ]) ->join('cadastro_vacina', 'cadastro_vacina.id', 'imunizacao_vacina_produtor_apresentacao.vacina_id') ->join('imunizacao_produtor', 'imunizacao_produtor.id', 'imunizacao_vacina_produtor_apresentacao.produtor_id') ->join('imunizacao_apresentacao', 'imunizacao_apresentacao.id', 'imunizacao_vacina_produtor_apresentacao.apresentacao_id') ->whereNotNull('cadastro_vacina.codigo') ->where(function($query) use ($request) { $query ->whereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_entrada_vacina') ->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id') ->whereColumn('imunizacao_entrada_vacina.vacina_id', 'cadastro_vacina.id') ->whereColumn('imunizacao_entrada_vacina.produtor_id', 'imunizacao_produtor.id') ->whereColumn('imunizacao_entrada_vacina.apresentacao_id', 'imunizacao_apresentacao.id') ->whereYear('imunizacao_entrada.data_entrada', $request['ano']) ->whereMonth('imunizacao_entrada.data_entrada', $request['mes']); }) ->orWhereExists(function ($query) use ($request) { $query->select(DB::raw(1)) ->from('imunizacao_saida_vacina') ->join('imunizacao_saida', 'imunizacao_saida.id', 'imunizacao_saida_vacina.saida_id') ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.id', 'imunizacao_saida_vacina.entrada_vacina_id') ->whereColumn('imunizacao_entrada_vacina.vacina_id', 'cadastro_vacina.id') ->whereColumn('imunizacao_entrada_vacina.produtor_id', 'imunizacao_produtor.id') ->whereColumn('imunizacao_entrada_vacina.apresentacao_id', 'imunizacao_apresentacao.id') ->whereYear('imunizacao_saida.data_saida', $request['ano']) ->whereMonth('imunizacao_saida.data_saida', $request['mes']); }); }) ->get() ->map(function($query) use ($salaVacinacao) { return [ 'CO_CNES' => $salaVacinacao->unidade_cnes, 'CO_PRODUTO' => (int) $query->vacina_codigo, 'CO_APRESENTACAO' => (int) $query->apresentacao_codigo, 'CO_PRODUTOR' => (int) $query->produtor_codigo, 'QT_DOSES_RECEBIDAS' => (int) $query->quantidade_recebida, 'QT_DOSES_DISTRIBUIDAS' => (int) $query->quantidade_distribuida, 'QT_DOSES_UTILIZADAS' => (int) $query->quantidade_utilizada, 'QT_DOSES_TRANSFERIDAS' => 0, 'QT_PERDA_QUEBRA' => (int) $query->quantidade_perda_quebra, 'QT_PERDA_FALTA_ENERGIA' => (int) $query->quantidade_perda_falta_energia, 'QT_PERDA_FALHA_EQUIP' => (int) $query->quantidade_perda_falha_equipamento, 'QT_PERDA_VALID_VENC' => (int) $query->quantidade_perda_validade_vencida, 'QT_PERDA_PROCED_INADEQ' => (int) $query->quantidade_perda_procedimento_inadequado, 'QT_PERDA_OUTROS_MOT' => (int) $query->quantidade_perda_outros, 'QT_PERDA_TRANSPORTE' => (int) $query->quantidade_perda_transporte, 'QT_SALDO_INDISPONIVEL' => (int) $query->quantidade_saldo_indisponivel, 'QT_SALDO_DISPONIVEL' => (int) $query->quantidade_saldo_disponivel, 'QT_INDISPONIVEL_ANTERIOR' => null, 'QT_DISPONIVEL_ANTERIOR' => null, ]; }); $items[] = [ 'cnes' => $salaVacinacao->unidade_cnes, 'itens_boletins_movimentacao' => $itensBoletinsMovimentacao, ]; }); return $items; } }