1034 lines
65 KiB
PHP
1034 lines
65 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Imunizacao;
|
|
|
|
use App\Enums\Cadastro\Localizacao\Zona;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Enums\Imunizacao\SaidaMotivo;
|
|
use App\Enums\Imunizacao\SaidaTipo;
|
|
use App\Models\Imunizacao\Exportacao;
|
|
use App\Services\Service;
|
|
use App\Utils\ZipUtil;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
|
|
class ExportacaoService extends Service
|
|
{
|
|
public static function create()
|
|
{
|
|
return [
|
|
'form' => 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;
|
|
}
|
|
}
|