Files
rkm-conectasus-ci-sandbox/api/app/Services/Bpa/ExportRelatorioInconsistenciaService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

183 lines
8.2 KiB
PHP

<?php
namespace App\Services\Bpa;
use App\Enums\Sigtap\Registro;
use App\Models\Bpa\Inconsistencia;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
class ExportRelatorioInconsistenciaService extends Service
{
public static function index()
{
switch (request()->query('registro_codigo')) {
case Registro::BPA_CONSOLIDADO:
return self::getProcedimentosConsolidados(request()->query());
break;
case Registro::BPA_INDIVIDUALIZADO:
return self::getProcedimentosIndividualizados(request()->query());
break;
}
}
private static function getProcedimentosConsolidados($params)
{
return DB::table('bpa_procedimento')
->join('cadastro_unidade', 'cadastro_unidade.id', 'bpa_procedimento.unidade_id')
->join('sigtap.competencia', 'competencia.id', 'bpa_procedimento.competencia_id')
->join('sigtap.procedimento', 'procedimento.id', 'bpa_procedimento.procedimento_id')
->join('sigtap.ocupacao', 'ocupacao.id', 'bpa_procedimento.ocupacao_id')
->join('sigtap.registro', 'registro.id', 'bpa_procedimento.registro_id')
->join('bpa_procedimento_inconsistencia', 'bpa_procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id')
->join('bpa_inconsistencia', 'bpa_inconsistencia.id', 'bpa_procedimento_inconsistencia.inconsistencia_id')
->select([
'bpa_procedimento.id',
'bpa_procedimento.origem',
'cadastro_unidade.id AS unidade_id',
'cadastro_unidade.nome_fantasia AS unidade_nome',
'competencia.id AS competencia_id',
'competencia.valor AS competencia_valor',
'procedimento.id AS procedimento_id',
'procedimento.codigo AS procedimento_codigo',
'procedimento.nome AS procedimento_nome',
'registro.id AS registro_id',
'registro.codigo AS registro_codigo',
'ocupacao.id AS ocupacao_id',
'ocupacao.codigo AS ocupacao_codigo',
'ocupacao.nome AS ocupacao_nome',
'bpa_procedimento.idade',
'bpa_inconsistencia.codigo AS inconsistencia_codigo',
'bpa_inconsistencia.descricao AS inconsistencia_descricao',
DB::raw('SUM(bpa_procedimento.quantidade) AS quantidade'),
])
->whereNull('bpa_procedimento.deleted_at')
->where([
'bpa_procedimento.unidade_id' => $params['unidade_id'],
'bpa_procedimento.competencia_id' => $params['competencia_id'],
])
->where('registro.codigo', Registro::BPA_CONSOLIDADO)
->whereExists(function($query) {
$query->select(DB::raw(1))
->from('bpa_procedimento_inconsistencia')
->whereColumn('bpa_procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id');
})
->groupBy([
'bpa_procedimento.origem',
'cadastro_unidade.id',
'cadastro_unidade.nome_fantasia',
'competencia.valor',
'procedimento.id',
'procedimento.codigo',
'procedimento.nome',
'registro.id',
'registro.codigo',
'ocupacao.id',
'ocupacao.codigo',
'ocupacao.nome',
'bpa_procedimento.idade',
])
->get();
}
private static function getProcedimentosIndividualizados($params)
{
return DB::table('bpa_procedimento')
->select([
'bpa_procedimento.origem',
'cadastro_unidade.id AS unidade_id',
'cadastro_unidade.nome_fantasia AS unidade_nome',
'competencia.id AS competencia_id',
'competencia.valor AS competencia_valor',
'cadastro_cidadao_usuario.nome AS usuario_nome',
'cadastro_paciente.id AS paciente_id',
'cadastro_cidadao_paciente.nome AS paciente_nome',
'procedimento.id AS procedimento_id',
'procedimento.codigo AS procedimento_codigo',
'procedimento.nome AS procedimento_nome',
'ocupacao.id AS ocupacao_id',
'ocupacao.codigo AS ocupacao_codigo',
'ocupacao.nome AS ocupacao_nome',
'bpa_procedimento.quantidade',
'registro.codigo AS registro_codigo',
'bpa_inconsistencia.codigo AS inconsistencia_codigo',
'bpa_inconsistencia.descricao AS inconsistencia_descricao',
])
->join('cadastro_unidade', 'cadastro_unidade.id', 'bpa_procedimento.unidade_id')
->join('sigtap.competencia', 'competencia.id', 'bpa_procedimento.competencia_id')
->join('cadastro_usuario', 'cadastro_usuario.id', 'bpa_procedimento.usuario_id')
->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
->join('cadastro_paciente', 'cadastro_paciente.id', 'bpa_procedimento.paciente_id')
->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id')
->join('sigtap.procedimento', 'procedimento.id', 'bpa_procedimento.procedimento_id')
->join('sigtap.registro', 'registro.id', 'bpa_procedimento.registro_id')
->join('sigtap.ocupacao', 'ocupacao.id', 'bpa_procedimento.ocupacao_id')
->join('bpa_procedimento_inconsistencia', 'bpa_procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id')
->join('bpa_inconsistencia', 'bpa_inconsistencia.id', 'bpa_procedimento_inconsistencia.inconsistencia_id')
->whereNull('bpa_procedimento.deleted_at')
->where([
'bpa_procedimento.unidade_id' => $params['unidade_id'],
'bpa_procedimento.competencia_id' => $params['competencia_id'],
])
->where('registro.codigo', Registro::BPA_INDIVIDUALIZADO)
->whereExists(function($query) {
$query->select(DB::raw(1))
->from('bpa_procedimento_inconsistencia')
->whereColumn('bpa_procedimento_inconsistencia.procedimento_id', 'bpa_procedimento.id');
})
->get();
}
public static function getPrintExportData() {
$resultado = self::index();
$colunas = collect(request()->selectedCols);
$colunas = $colunas->reject(function ($item) {
return $item['key'] === 'actions';
});
$colunasAdicionais = [
[
"key" => "inconsistencia_codigo",
"label" => "Código",
"class" => null
],
[
"key" => "inconsistencia_descricao",
"label" => "Descrição",
"class" => null
]
];
$colunas = $colunas->map(function ($item) {
return [
'key' => $item['key'] === 'ocupacao' ? 'ocupacao_nome' : ($item['key'] === 'procedimento' ? 'procedimento_nome' : $item['key']),
'label' => $item['key'] === 'ocupacao' ? 'Ocupação' : ($item['key'] === 'procedimento' ? 'Procedimento' : $item['label']),
'class' => $item['class'],
];
});
$colunas = $colunas->merge($colunasAdicionais);
$instrumento_registro = '';
if(Registro::BPA_CONSOLIDADO == request()->registro_codigo){
$instrumento_registro = 'BPA - Consolidado';
}
if(Registro::BPA_INDIVIDUALIZADO == request()->registro_codigo){
$instrumento_registro = 'BPA - Individualizado';
}
return [
'itens' => $resultado,
'colunas' => $colunas,
'unidade' => $resultado->firstWhere('unidade_id', request()->unidade_id)->unidade_nome,
'competencia' => $resultado->firstWhere('competencia_id', request()->competencia_id)->competencia_valor,
'instrumento_registro' => $instrumento_registro,
'total' => $resultado->count(),
];
}
}