init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Models\Administracao\Funcionalidade;
use App\Models\Administracao\Modulo;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Administracao\RelatorioAcessoFuncionalidadeService;
use App\Utils\Exports\Pdf1;
class RelatorioAcessoFuncionalidadeController extends Controller
{
private const TITLE = 'RELATÓRIO DE ACESSO À FUNCIONALIDADE';
private const TEMPLATE = 'administracao.relatorio-acesso-funcionalidade';
public function __invoke()
{
$itens = RelatorioAcessoFuncionalidadeService::index();
$usuario = Usuario::find(request()->usuario_id);
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$modulo = Modulo::find(request()->modulo_id);
$funcionalidade = Funcionalidade::find(request()->funcionalidade_id);
$data = [
'data' => [
'start' => request()->data['start'],
'end' => request()->data['end'],
],
'hora' => [
'start' => request()->hora['start'] ?? '-',
'end' => request()->hora['end'] ?? '-',
],
'usuario' => $usuario->nome ?? 'Todos',
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'modulo' => $modulo->nome ?? 'Todos',
'funcionalidade' => $funcionalidade->nome ?? 'Todas',
'dados' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Log\AcessoSistemaStatus;
use App\Services\Administracao\RelatorioAcessoSistemaService;
use App\Utils\Exports\Pdf1;
class RelatorioAcessoSistemaController extends Controller
{
private const TITLE = 'RELATÓRIO DE ACESSO AO SISTEMA';
private const TEMPLATE = 'administracao.relatorio-acesso-sistema';
public function __invoke()
{
$itens = RelatorioAcessoSistemaService::index();
$usuario = Usuario::find(request()->usuario_id);
$status = AcessoSistemaStatus::find(request()->status_id);
$data = [
'data' => [
'start' => request()->data['start'],
'end' => request()->data['end'],
],
'hora' => [
'start' => request()->hora['start'] ?? '-',
'end' => request()->hora['end'] ?? '-',
],
'usuario' => $usuario->nome ?? 'Todos',
'status' => $status->nome ?? 'Todas',
'dados' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioHistoricoPapelLotacaoService;
use App\Utils\Exports\Pdf1;
class RelatorioHistoricoPapelLotacaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE HISTÓRICO DE PAPEL POR LOTAÇÃO';
private const TEMPLATE = 'administracao.relatorio-historico-papel-lotacao';
public static function getTemplate()
{
return RelatorioHistoricoPapelLotacaoService::getPrintData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioHistoricoPermissaoLotacaoService;
use App\Utils\Exports\Pdf1;
class RelatorioHistoricoPermissaoLotacaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE HISTÓRICO DE PERMISSÃO POR LOTAÇÃO';
private const TEMPLATE = 'administracao.relatorio-historico-permissao-lotacao';
public static function getTemplate()
{
return RelatorioHistoricoPermissaoLotacaoService::getPrintData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioHistoricoPermissaoPapelService;
use App\Utils\Exports\Pdf1;
class RelatorioHistoricoPermissaoPapelController extends Controller
{
private const TITLE = 'RELATÓRIO DE HISTÓRICO DE PERMISSÃO POR PAPEL';
private const TEMPLATE = 'administracao.relatorio-historico-permissao-papel';
public static function getTemplate()
{
return RelatorioHistoricoPermissaoPapelService::getPrintData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioPapelLotacaoService;
use App\Utils\Exports\Pdf1;
class RelatorioPapelLotacaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE PAPEL POR LOTAÇÃO';
private const TEMPLATE = 'administracao.relatorio-papel-lotacao';
public function __invoke()
{
$itens = RelatorioPapelLotacaoService::index();
$data = ['data' => $itens];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioPermissaoLotacaoService;
use App\Utils\Exports\Pdf1;
class RelatorioPermissaoLotacaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE PERMISSÃO POR LOTAÇÃO';
private const TEMPLATE = 'administracao.relatorio-permissao-lotacao';
public function __invoke()
{
$itens = RelatorioPermissaoLotacaoService::index();
$data = ['data' => $itens];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Impressao\Administracao;
use App\Http\Controllers\Controller;
use App\Services\Administracao\RelatorioPermissaoPapelService;
use App\Utils\Exports\Pdf1;
class RelatorioPermissaoPapelController extends Controller
{
private const TITLE = 'RELATÓRIO DE PERMISSÃO POR PAPEL';
private const TEMPLATE = 'administracao.relatorio-permissao-papel';
public function __invoke()
{
$itens = RelatorioPermissaoPapelService::index();
$data = ['data' => $itens];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\SaidaItem;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Illuminate\Support\Str;
class BaixaController extends Controller
{
private const TITLE = 'BAIXA';
private const TEMPLATE = 'almoxarifado.baixa';
public static function getTemplate($id)
{
$saidaItem = SaidaItem::findOrFail($id);
$entradaItens = $saidaItem->entradaItens->map(fn ($entradaItem) => [
'entrada_item_id' => $entradaItem->id,
'quantidade_saida' => $entradaItem->pivotSaidaItemEntradaItem->quantidade_saida,
'lote' => $entradaItem->lote,
'validade_lote' => $entradaItem->validade_lote,
]);
$semLote = collect();
$comLote = collect();
collect($entradaItens)->each(function ($entrada) use ($semLote, $comLote) {
if (is_null($entrada['lote'])) {
$semLote->push($entrada);
}
else {
$comLote->push($entrada);
}
});
$possuiEntradaComLote = $comLote->isNotEmpty();
$semLote = $semLote
->sortBy('entrada_item_id')
->values();
$comLote = $comLote
->sortBy([
['validade_lote', 'asc'],
['entrada_item_id', 'asc']
])
->values();
$entradaItens = $comLote->concat($semLote)->map(function ($entrada) {
if (!is_null($entrada['validade_lote'])) {
$entrada['validade_lote'] = $entrada['validade_lote']->format('d/m/Y');
}
return $entrada;
});
return [
'data' => $saidaItem->saida->created_at->format('d/m/Y'),
'unidade' => $saidaItem->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
'localAtendimento' => $saidaItem->createdCentroCusto->infraestrutura->nome,
'setor' => $saidaItem->createdCentroCusto->setor->nome,
'usuario' => $saidaItem->createdLotacao->usuario->cidadao->nome,
'endereco' => $saidaItem->createdCentroCusto->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($saidaItem->createdCentroCusto->infraestrutura->telefone),
'motivo' => $saidaItem->saida->baixa->motivo->descricao,
'justificativa' => $saidaItem->saida->baixa->justificativa,
'usuarioSolicitante' => $saidaItem->saida->baixa->usuarioSolicitante->cidadao->nome ?? null,
'itens' => collect([
[
'material' => [
'id' => $saidaItem->material->id,
'descricao' => $saidaItem->material->descricao_completa,
],
'quantidade' => $saidaItem->quantidade,
'possui_entrada_com_lote' => $possuiEntradaComLote,
'entrada_itens' => $entradaItens,
'estornado' => $saidaItem->estornado,
]
])->filter(fn ($i) => !$i['estornado'])->all()
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Grupo\Grupo;
use App\Models\Cadastro\Subgrupo\Subgrupo;
use App\Services\Almoxarifado\BalanceteService;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class BalanceteController extends Controller
{
private const TITLE = 'BALANCETE';
private const TEMPLATE = 'almoxarifado.balancete';
public static function getTemplate()
{
$periodo = [
'inicio' => Carbon::createFromFormat('d/m/Y', request()->inicio)->setTime(0, 0, 0),
'fim' => Carbon::createFromFormat('d/m/Y', request()->fim)->setTime(23, 59, 59),
];
$grupo = request()->query('grupo_id') ? Grupo::find(request()->query('grupo_id')) : null;
$subgrupo = request()->query('subgrupo_id') ? Subgrupo::find(request()->query('subgrupo_id')) : null;
$colunas = collect(request()->selectedCols);
$balancete = BalanceteService::getBalancete($periodo, request()->grupo_id, request()->subgrupo_id, request()->origem_programatica_id);
BalanceteService::formatarSaldos($balancete);
$itens = null;
if ($colunas->contains('material')) {
$itens = $balancete['por_material'];
}
else if ($colunas->contains('subgrupo')) {
$itens = $balancete['por_subgrupo'];
}
else {
$itens = $balancete['por_grupo'];
}
return [
'inicio' => request()->inicio,
'fim' => request()->fim,
'grupo' => $grupo->nome ?? null,
'subgrupo' => $subgrupo->nome ?? null,
'colunas' => $colunas,
'itens' => $itens,
'totalizadores' => $balancete['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Grupo\Grupo;
use App\Models\Cadastro\Subgrupo\Subgrupo;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Services\Almoxarifado\InventarioService;
use App\Utils\Exports\Pdf1;
class InventarioController extends Controller
{
private const TITLE = 'INVENTÁRIO';
private const TEMPLATE = 'almoxarifado.inventario';
public static function getTemplate()
{
$grupo = request()->query('grupo_id') ? Grupo::find(request()->query('grupo_id')) : null;
$subgrupo = request()->query('subgrupo_id') ? Subgrupo::find(request()->query('subgrupo_id')) : null;
return [
'localAtendimento' => Lotacao::findOrFail(auth()->payload()->get('lotacao_id'))->infraestrutura->nome,
'grupo' => $grupo->nome ?? null,
'subgrupo' => $subgrupo->nome ?? null,
'materiais' => InventarioService::index()
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\ConsumoFinanceiroService;
use App\Utils\Exports\Pdf1;
class ConsumoFinanceiroController extends Controller
{
private const TITLE = 'RELATÓRIO DE CONSUMO FINANCEIRO';
private const TEMPLATE = 'almoxarifado.relatorios.consumo-financeiro';
public static function getTemplate()
{
return ConsumoFinanceiroService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\ConsumoMedioMensalService;
use App\Utils\Exports\Pdf1;
class ConsumoMedioMensalController extends Controller
{
private const TITLE = 'RELATÓRIO DE CONSUMO MÉDIO MENSAL';
private const TEMPLATE = 'almoxarifado.relatorios.consumo-medio-mensal';
public static function getTemplate()
{
return ConsumoMedioMensalService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\EntradaService;
use App\Utils\Exports\Pdf1;
class EntradaController extends Controller
{
private const TITLE = 'RELATÓRIO DE ENTRADA';
private const TEMPLATE = 'almoxarifado.relatorios.entrada';
public static function getTemplate()
{
return EntradaService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\EstornoEntradaService;
use App\Utils\Exports\Pdf1;
class EstornoEntradaController extends Controller
{
private const TITLE = 'RELATÓRIO DE ESTORNO DE ENTRADAS';
private const TEMPLATE = 'almoxarifado.relatorios.estorno-entrada';
public static function getTemplate()
{
return EstornoEntradaService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\EstornoSaidaService;
use App\Utils\Exports\Pdf1;
class EstornoSaidaController extends Controller
{
private const TITLE = 'RELATÓRIO DE ESTORNO DE SAÍDAS';
private const TEMPLATE = 'almoxarifado.relatorios.estorno-saida';
public static function getTemplate()
{
return EstornoSaidaService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\EntradaTipo;
use App\Models\Almoxarifado\SaidaTipo;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Setor;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\Material\Material;
use App\Models\Cadastro\OrigemProgramatica;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Almoxarifado\Relatorios\MovimentacaoGeralService;
use App\Utils\Exports\Pdf1;
class MovimentacaoGeralController extends Controller
{
private const TITLE = 'RELATÓRIO DE MOVIMENTAÇÃO GERAL';
private const TEMPLATE = 'almoxarifado.relatorios.movimentacao-geral';
public function __invoke()
{
$itens = MovimentacaoGeralService::index();
$data = [
'periodo' => [
'start' => request()->periodo['start'],
'end' => request()->periodo['end'],
],
'movimentacao_tipo' => request()->movimentacao_tipo === 'entrada' ? 'ENTRADA' : 'SAÍDA',
'movimentacao_subtipo' => (request()->movimentacao_tipo === 'entrada' ? EntradaTipo::find(request()->movimentacao_subtipo_id)->nome ?? null : SaidaTipo::find(request()->movimentacao_subtipo_id)->nome ?? null) ?? 'Todos',
'unidade' => Unidade::find(request()->unidade_id)->nome_fantasia ?? 'Todas',
'infraestrutura' => Infraestrutura::find(request()->infraestrutura_id)->nome ?? 'Todos',
'setor' => Setor::find(request()->setor_id)->nome ?? 'Todos',
'usuario' => Usuario::find(request()->usuario_id)->nome ?? 'Todos',
'origem_programatica' => OrigemProgramatica::find(request()->origem_programatica_id) ?? 'Todas',
'material' => Material::find(request()->material_id)->descricao_completa ?? 'Todos',
'colunas' => collect(request()->selected_cols),
'itens' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\PosicaoEstoqueService;
use App\Utils\Exports\Pdf1;
class PosicaoEstoqueController extends Controller
{
private const TITLE = 'RELATÓRIO DE POSIÇÃO DE ESTOQUE';
private const TEMPLATE = 'almoxarifado.relatorios.posicao-estoque';
public static function getTemplate()
{
return PosicaoEstoqueService::getPrintData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\RequisicaoService;
use App\Utils\Exports\Pdf1;
class RequisicaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE REQUISIÇÕES';
private const TEMPLATE = 'almoxarifado.relatorios.requisicao';
public static function getTemplate()
{
return RequisicaoService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\SaidaService;
use App\Utils\Exports\Pdf1;
class SaidaController extends Controller
{
private const TITLE = 'RELATÓRIO DE SAÍDAS';
private const TEMPLATE = 'almoxarifado.relatorios.saida';
public static function getTemplate()
{
return SaidaService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\Almoxarifado\Relatorios\ValidadeMaterialService;
use App\Utils\Exports\Pdf1;
class ValidadeMaterialController extends Controller
{
private const TITLE = 'RELATÓRIO DE VALIDADE DE MATERIAL';
private const TEMPLATE = 'almoxarifado.relatorios.validade-material';
public static function getTemplate()
{
return ValidadeMaterialService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\Requisicao;
use App\Services\Almoxarifado\RequisicaoPendentePermissaoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class RequisicaoController extends Controller
{
private const TITLE = 'REQUISIÇÃO';
private const TEMPLATE = 'almoxarifado.requisicao';
public static function getTemplate($id)
{
$requisicao = Requisicao::findOrFail($id);
$data = RequisicaoPendentePermissaoService::edit($id);
$isPrimeiroEnvio = $data['form']['envios']->isEmpty();
$data['model']['itens'] = $data['model']['itens']->map(function ($item) {
$item['entrada_itens'] = $item['entrada_itens']
->filter(fn ($i) => $i['quantidade_saida'] > 0)
->values();
return $item;
});
return [
'data' => (new Carbon($requisicao->created_at))->format('d/m/Y'),
'numero' => $requisicao->numero,
'requisitante' => [
'unidade' => $requisicao->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
'local_atendimento' => $requisicao->createdCentroCusto->infraestrutura->nome,
'setor' => $requisicao->createdCentroCusto->setor->nome,
'usuario' => $requisicao->createdLotacao->usuario->cidadao->nome,
'endereco' => $requisicao->createdCentroCusto->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($requisicao->createdCentroCusto->infraestrutura->telefone)
],
'isPrimeiroEnvio' => $isPrimeiroEnvio,
'itens' => $data['model']['itens'],
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\Requisicao;
use App\Services\Almoxarifado\RequisicaoPendentePermissaoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class RequisicaoSeparacaoMaterialController extends Controller
{
private const TITLE = 'REQUISIÇÃO - SEPARAR MATERIAL';
private const TEMPLATE = 'almoxarifado.requisicao-separacao-material';
public static function getTemplate($id)
{
$requisicao = Requisicao::findOrFail($id);
$data = RequisicaoPendentePermissaoService::edit($id);
$isPrimeiroEnvio = $data['form']['envios']->isEmpty();
$data['model']['itens'] = $data['model']['itens']->map(function ($item) {
$item['entrada_itens'] = $item['entrada_itens']
->filter(fn ($i) => $i['quantidade_saida'] > 0)
->values();
return $item;
});
return [
'data' => (new Carbon($requisicao->created_at))->format('d/m/Y'),
'numero' => $requisicao->numero,
'requisitante' => [
'unidade' => $requisicao->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
'local_atendimento' => $requisicao->createdCentroCusto->infraestrutura->nome,
'setor' => $requisicao->createdCentroCusto->setor->nome,
'usuario' => $requisicao->createdLotacao->usuario->cidadao->nome,
'endereco' => $requisicao->createdCentroCusto->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($requisicao->createdCentroCusto->infraestrutura->telefone)
],
'isPrimeiroEnvio' => $isPrimeiroEnvio,
'itens' => $data['model']['itens'],
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,84 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\Saida;
use App\Services\Almoxarifado\SaidaService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class SaidaController extends Controller
{
private const TITLE = 'SAÍDA';
private const TEMPLATE = 'almoxarifado.saida';
public static function getTemplate($id)
{
$saida = Saida::findOrFail($id);
$data = SaidaService::edit($id);
$data['model']['itens'] = $data['model']['itens']->filter(fn ($i) => !$i['estornado'])->map(function ($item) {
$semLote = collect();
$comLote = collect();
collect($item['entrada_itens'])->each(function ($entrada) use ($semLote, $comLote) {
if (is_null($entrada['lote'])) {
$semLote->push($entrada);
}
else {
$comLote->push($entrada);
}
});
$item['possui_entrada_com_lote'] = $comLote->isNotEmpty();
$semLote = $semLote
->sortBy('entrada_item_id')
->values();
$comLote = $comLote
->sortBy([
['validade_lote', 'asc'],
['entrada_item_id', 'asc']
])
->values();
$item['entrada_itens'] = $comLote->concat($semLote)->map(function ($entrada) {
if (!is_null($entrada['validade_lote'])) {
$entrada['validade_lote'] = $entrada['validade_lote']->format('d/m/Y');
}
return $entrada;
});
return $item;
});
return [
'data' => (new Carbon($saida->requisicao->data))->format('d/m/Y'),
'numero' => $saida->requisicao->numero,
'requisitante' => [
'unidade' => $saida->requisicao->centroCusto->infraestrutura->unidade->nome_fantasia,
'local_atendimento' => $saida->requisicao->centroCusto->infraestrutura->nome,
'setor' => $saida->requisicao->centroCusto->setor->nome,
'usuario' => $saida->requisicao->usuario->cidadao->nome,
'endereco' => $saida->requisicao->centroCusto->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($saida->requisicao->centroCusto->infraestrutura->telefone)
],
'itens' => $data['model']['itens'],
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,81 @@
<?php
namespace App\Http\Controllers\Impressao\Almoxarifado;
use App\Http\Controllers\Controller;
use App\Models\Almoxarifado\Saida;
use App\Services\Almoxarifado\TransferenciaService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class TransferenciaController extends Controller
{
private const TITLE = 'DOCUMENTO DE TRANSFERÊNCIA DE ESTOQUE';
private const TEMPLATE = 'almoxarifado.transferencia';
public static function getTemplate($id)
{
$saida = Saida::findOrFail($id);
$data = TransferenciaService::edit($id);
$data['model']['itens'] = $data['model']['itens']->filter(fn ($i) => !$i['estornado'])->map(function ($item) {
$semLote = collect();
$comLote = collect();
collect($item['entrada_itens'])->each(function ($entrada) use ($semLote, $comLote) {
if (is_null($entrada['lote'])) {
$semLote->push($entrada);
}
else {
$comLote->push($entrada);
}
});
$item['possui_entrada_com_lote'] = $comLote->isNotEmpty();
$semLote = $semLote
->sortBy('entrada_item_id')
->values();
$comLote = $comLote
->sortBy([
['validade_lote', 'asc'],
['entrada_item_id', 'asc']
])
->values();
$item['entrada_itens'] = $comLote->concat($semLote)->map(function ($entrada) {
if (!is_null($entrada['validade_lote'])) {
$entrada['validade_lote'] = $entrada['validade_lote']->format('d/m/Y');
}
return $entrada;
});
return $item;
});
return [
'destino' => [
'unidade' => $saida->transferencia->centroCusto->infraestrutura->unidade->nome_fantasia,
'local_atendimento' => $saida->transferencia->centroCusto->infraestrutura->nome,
'setor' => $saida->transferencia->centroCusto->setor->nome,
'usuario' => $saida->transferencia->usuario->cidadao->nome,
'endereco' => $saida->transferencia->centroCusto->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($saida->transferencia->centroCusto->infraestrutura->telefone)
],
'itens' => $data['model']['itens'],
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Services\Ambulatorio\AgendamentoService;
use App\Utils\Exports\PdfCupom;
class AgendamentoController extends Controller
{
private const TITLE = 'AGENDAMENTO';
private const TEMPLATE = 'ambulatorio.agendamento';
public static function getTemplate($id)
{
return AgendamentoService::getPrintData($id);
}
public function __invoke($id)
{
return PdfCupom::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AgendamentoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class AgendamentoDemandaEspontaneaController extends Controller
{
private const TITLE = 'AGENDAMENTOS E DEMANDAS';
private const TEMPLATE = 'ambulatorio.agendamento-demanda-espontanea';
public static function getTemplate()
{
$params = (object) request()->all();
$paciente = Paciente::findOrFail($params->paciente_id);
$municipioResidencia = $paciente->cidadao->domicilio->endereco->logradouro->municipio ?? null;
$agendamentosDemandas = AgendamentoService::getAgendamentosDemandasEspontaneas($params);
$itens = $agendamentosDemandas['itens'];
$itens->each(function ($item) {
$item->data = Carbon::create($item->data)->format('d/m/Y');
});
return [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'data_nascimento' => is_null($paciente->cidadao->data_nascimento)
? null
: (new Carbon($paciente->cidadao->data_nascimento))->format('d/m/Y'),
'idade' => $paciente->cidadao->idade_formatada,
'nome_mae' => $paciente->cidadao->nome_mae,
'prontuario' => $paciente->prontuario,
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
'municipio_uf' => is_null($municipioResidencia)
? null
: "{$municipioResidencia->nome} / {$municipioResidencia->estado->uf}",
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
'classificacao' => $paciente->classificacao->descricao ?? null,
'validade_fim' => is_null($paciente->validade_fim)
? 'INDETERMINADO'
: (new Carbon($paciente->validade_fim))->format('d/m/Y')
],
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'origem' => request()->origem === 'consulta-agendada'
? 'Consulta agendada'
: (request()->origem === 'demanda-espontanea' ? 'Demanda espontânea' : 'Todas'),
'colunas' => request()->columns,
'itens' => $itens,
'totalizadores' => $agendamentosDemandas['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Services\Ambulatorio\AgendamentoService;
use App\Utils\Exports\PdfCupom;
class AgendamentoExternoController extends Controller
{
private const TITLE = 'AGENDAMENTO';
private const TEMPLATE = 'ambulatorio.agendamento';
public static function getTemplate($id)
{
return AgendamentoService::getPrintDataExterno($id);
}
public function __invoke($id)
{
return PdfCupom::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,152 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Geral\DocumentoTipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\DocumentoTipo as GeralDocumentoTipo;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\NumericUtil;
class AtestadoController extends Controller
{
private const TITLE = 'ATESTADO';
private const TEMPLATE = 'ambulatorio.atestado';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$atestados = $this->getAtestadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ATESTADO_MEDICO);
} else {
$atestados = $this->getAtestados($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('atestados'));
}
private function getAtestadosNaoSalvos($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$unidade = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura->unidade;
$atestados[] = [
'modelo_id' => (int) request()->modelo_id,
'descricao' => request()->descricao,
'is_atestado_acompanhante' => DataUtil::getBooleanValueFromStringBoolean(request()->is_atestado_acompanhante),
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => request()->nome,
'documento' => [
'tipo' => GeralDocumentoTipo::find(request()->documento_tipo_id)->nome ?? null,
'numero' => request()->documento_tipo_id ? (request()->documento_tipo_id == DocumentoTipo::CPF ? request()->cpf : request()->cns) : null,
],
'unidade' => [
'nome_fantasia' => $unidade->nome_fantasia,
],
'data' => request()->data,
'horario' => request()->horario,
'horario_inicial' => request()->horario_inicial,
'quantidade_horas' => request()->quantidade_horas,
'cid' => request()->cid['codigo'] ?? null,
'dias' => request()->dias,
'dias_por_extenso' => NumericUtil::getPorExtenso((int) request()->dias),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? (
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
$data = [
'atestados' => $atestados,
];
return $data;
}
private function getAtestados($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atestados = [];
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$atestados, $paciente) {
$soap->atestados()->get()->each(function($atestado) use (&$atestados, $paciente) {
$lotacao = $atestado->createdLotacao;
$unidade = $atestado->createdCentroCusto->infraestrutura->unidade;
$atestados[] = [
'modelo_id' => $atestado->modelo_id,
'descricao' => $atestado->descricao,
'is_atestado_acompanhante' => $atestado->is_atestado_acompanhante,
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => $atestado->nome_acompanhante,
'documento' => [
'tipo' => $atestado->documentoTipo->nome ?? null,
'numero' => $atestado->documento_tipo_id ? ($atestado->documento_tipo_id === DocumentoTipo::CPF ? $atestado->cpf : $atestado->cns) : null,
],
'unidade' => [
'nome_fantasia' => $unidade->nome_fantasia,
],
'data' => $atestado->data ? $atestado->data->format('d/m/Y') : null,
'horario' => $atestado->horario ? $atestado->horario->format('H:i') : null,
'horario_inicial' => $atestado->horario_inicial ? $atestado->horario_inicial->format('H:i') : null,
'quantidade_horas' => $atestado->quantidade_horas,
'cid' => $atestado->cid->codigo ?? null,
'dias' => $atestado->dias,
'dias_por_extenso' => NumericUtil::getPorExtenso((int) $atestado->dias),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? (
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
});
});
$data = [
'atestados' => $atestados,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}

View File

@@ -0,0 +1,156 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class CartaMedicaController extends Controller
{
private const TITLE = 'CARTA MÉDICA';
private const TEMPLATE = 'ambulatorio.carta-medica';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$cartasMedicas = $this->getCartasMedicasNaoSalvas($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::CARTA_MEDICA);
} else {
$cartasMedicas = $this->getCartasMedicas($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('cartasMedicas'));
}
private function getCartasMedicasNaoSalvas($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$infraestrutura = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
$cartasMedicas[] = [
'usuario' => [
'nome' => $lotacao->usuario->cidadao->nome,
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
'unidade' => [
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
'endereco' => $infraestrutura->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
],
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
'idade' => $paciente->cidadao->idadeFormatada,
'prontuario' => $paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae,
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
],
'descricao' => request()->descricao,
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
$data = [
'cartasMedicas' => $cartasMedicas,
];
return $data;
}
private function getCartasMedicas($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$cartasMedicas = [];
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$cartasMedicas, $paciente) {
$soap->cartasMedicas()->get()->each(function($cartaMedica) use (&$cartasMedicas, $paciente) {
$lotacao = $cartaMedica->createdLotacao;
$infraestrutura = $cartaMedica->createdCentroCusto->infraestrutura;
$cartasMedicas[] = [
'usuario' => [
'nome' => $lotacao->usuario->cidadao->nome,
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
'unidade' => [
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
'endereco' => $infraestrutura->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
],
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
'idade' => $paciente->cidadao->idadeFormatada,
'prontuario' => $paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae,
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
],
'descricao' => $cartaMedica->descricao,
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
});
});
$data = [
'cartasMedicas' => $cartasMedicas,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Services\Ambulatorio\GerenciamentoDiarioService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
use Illuminate\Support\Str;
class DeclaracaoComparecimentoController extends Controller
{
private const TITLE = 'DECLARAÇÃO DE COMPARECIMENTO';
private const TEMPLATE = 'ambulatorio.declaracao-comparecimento';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$declaracoes = $this->getDeclaracoesNaoSalvas($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::DECLARACAO_COMPARECIMENTO);
} else {
$declaracoes = $this->getDeclaracoes($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('declaracoes'));
}
private function getDeclaracoesNaoSalvas($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$centroCusto = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'));
$declaracoes[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => request()->nome_acompanhante,
'motivo_comparecimento' => request()->motivo_comparecimento,
'data' => Carbon::now()->format('d/m/Y'),
'entrada' => request()->entrada,
'saida' => request()->saida,
'unidade' => $centroCusto->infraestrutura->unidade->nome_fantasia,
'infraestrutura' => $centroCusto->infraestrutura->nome,
'turno' => !isset(request()->turno['nome'])
? null
: Str::lower(request()->turno['nome']),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - '
. $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
$data = [
'declaracoes' => $declaracoes,
];
return $data;
}
private function getDeclaracoes($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$declaracoes = [];
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atendimento->declaracoesComparecimento()
->where(fn ($q) => $q
->whereDoesntHave('soap')
->orWhereHas('soap', fn ($q) => $q
->where('is_rascunho', false)
)
)
->orderByDesc('created_at')
->get(['id'])
->each(function ($declaracao) use (&$declaracoes) {
$declaracoes[] = GerenciamentoDiarioService::getDeclaracaoComparecimentoPrintData($declaracao->id);
});
$data = [
'declaracoes' => $declaracoes,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}

View File

@@ -0,0 +1,307 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\Ciap;
use App\Models\Intranet\Cliente;
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
use App\Models\Sigtap\Cid;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class EncaminhamentoController extends Controller
{
public function __invoke($atendimentoId)
{
$cliente = Cliente::where('link', app('config')->get('database.default'))
->where('sistema_id', 1)
->firstOrFail();
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
$encaminhamentos = [];
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$encaminhamentos[] = self::getDadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ENCAMINHAMENTO);
} else {
self::getAtendimento($atendimentoId, $encaminhamentos);
}
$data = [
'cliente' => [
'nome' => Str::upper($cliente->nome),
'logotipo' => $logotipo,
],
'encaminhamentos' => $encaminhamentos,
];
return SnappyPdf::loadView('impressoes.template.ambulatorio.encaminhamento', compact('data'))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->inline();
}
public static function getAtendimento($atendimentoId, &$encaminhamentos) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$encaminhamentos = [];
$regulacaoData = self::getRegulacaoData();
$atendimento->soaps()
->where('is_rascunho', false)
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
->get()
->each(function($soap) use (&$encaminhamentos, $paciente, $regulacaoData) {
$soap->encaminhamentos()
->when($regulacaoData['especialidade_id'], fn ($q, $id) => $q->where('servico_especializado_especialidade_id', $id))
->get()
->each(function($encaminhamento) use (&$encaminhamentos, $paciente) {
$cid = Cid::find($encaminhamento->servico_especializado_cid_id);
$ciap = Ciap::find($encaminhamento->servico_especializado_ciap_id);
$intersetorialInfraestrutura = $encaminhamento->intersetorialInfraestrutura;
$infraestrutura = $encaminhamento->createdCentroCusto->infraestrutura;
$usuario = $encaminhamento->createdLotacao->usuario;
$instituicao = null;
$endereco = null;
$pa = false;
$consulta = false;
$programa = null;
$internacao = false;
$outros = null;
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
$endereco = $intersetorialInfraestrutura->endereco->completo;
$outros = 'Intersetorial';
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
$programa = 'Encaminhamento para CAPS';
}
else if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
$programa = 'Encaminhamento para serviço de atenção domiciliar';
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
$internacao = true;
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
$consulta = true;
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
$pa = true;
}
$encaminhamentos[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'prontuario' => $paciente->prontuario,
'nome_social' => $paciente->cidadao->nome_social,
'idade' => $paciente->cidadao->idade_formatada,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao,
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $paciente->cidadao->domicilio->endereco->numero ?? null,
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero ?? null,
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $paciente->cidadao->domicilio
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
: null,
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'instituicao' => $instituicao,
'endereco' => $endereco,
'especialidade' => $encaminhamento->servicoEspecializadoEspecialidade->nome ?? null,
'classificacao_risco' => $encaminhamento->servicoEspecializadoClassificacaoRisco->descricao_encaminhamento ?? null,
'pa' => $pa,
'consulta' => $consulta,
'programa' => $programa,
'internacao' => $internacao,
'outros' => $outros,
'unidade_origem' => [
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestrutura->unidade->cnes,
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuario->cidadao->nome ?? null,
'usuario_nome' => $encaminhamento->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $encaminhamento->createdLotacao->ocupacao->codigo . ' - '
. $encaminhamento->createdLotacao->ocupacao->nome,
'documento' => $encaminhamento->createdLotacao->usuario->registro_tipo_id
? ($encaminhamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $encaminhamento->createdLotacao->usuario->registro_tipo_outro
: $encaminhamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$encaminhamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => $encaminhamento->created_at->format('d/m/Y') ?? null,
'horario' => $encaminhamento->created_at->format('H:i') ?? null,
'motivo' => $encaminhamento->servico_especializado_motivo ?? null,
'cid' => $encaminhamento->servico_especializado_cid_id ? $cid->codigo.' - '.$cid->nome : null,
'ciap' => $encaminhamento->servico_especializado_ciap_id ? $ciap->codigo.' - '.$ciap->descricao : null,
];
});
});
}
public static function getDadosNaoSalvos($pacienteId) {
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$infraestrutura = $currentLotacao->infraestrutura;
$usuario = $currentLotacao->usuario;
$instituicao = null;
$endereco = null;
$pa = false;
$consulta = false;
$programa = null;
$internacao = false;
$outros = null;
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
$intersetorialInfraestrutura = Infraestrutura::where('id', request()->infraestrutura['id'])->first();
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
$endereco = $intersetorialInfraestrutura->endereco->completo;
$outros = 'Intersetorial';
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
$programa = 'Encaminhamento para CAPS';
}
else if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
$programa = 'Encaminhamento para serviço de atenção domiciliar';
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
$internacao = true;
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
$consulta = true;
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
$pa = true;
}
return [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'prontuario' => $paciente->prontuario,
'nome_social' => $paciente->cidadao->nome_social,
'idade' => $paciente->cidadao->idade_formatada,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao,
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->nome,
'numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->numero,
'sem_numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->sem_numero,
'complemento' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->complemento ?? '',
'cep' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep
? MaskUtil::getCepMasked(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep)
: null,
'municipio' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->nome,
'ibge' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->ibge,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'instituicao' => $instituicao,
'endereco' => $endereco,
'especialidade' => request()->especialidade ? request()->especialidade['descricao'] : null,
'classificacao_risco' => request()->classificacaoRisco ? request()->classificacaoRisco['descricaoEncaminhamento'] : null,
'pa' => $pa,
'consulta' => $consulta,
'programa' => $programa,
'internacao' => $internacao,
'outros' => $outros,
'unidade_origem' => [
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestrutura->unidade->cnes,
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuario->cidadao->nome ?? null,
'usuario_nome' => $usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
. $currentLotacao->ocupacao->nome,
'documento' => $usuario->registro_tipo_id
? ($usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $usuario->registro_tipo_outro
: $usuario->registroTipo->sigla
) . ": {$usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => Carbon::now()->format('d/m/Y') ?? null,
'horario' => Carbon::now()->format('H:i') ?? null,
'motivo' => request()->motivo ?? null,
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : null,
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : null,
];
}
private static function getRegulacaoData()
{
$regulacaoData = [
'soap_id' => null,
'especialidade_id' => null,
];
if (request()->regulacao_solicitacao_id) {
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
$regulacaoData['especialidade_id'] = $regulacaoSolicitacao->itens()->first('especialidade_id')->especialidade_id;
}
return $regulacaoData;
}
}

View File

@@ -0,0 +1,443 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento as EncaminhamentoEnum;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Intranet\Sistema;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCaraterInternacao;
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoClinica;
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCausaExterna;
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoVinculoPrevidencia;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoap;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\DocumentoTipo;
use App\Models\Intranet\Cliente;
use App\Models\Sigtap\Cid;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
class EncaminhamentoHospitalarController extends Controller
{
private const TITLE = 'LAUDO PARA SOLICITAÇÃO DE AUTORIZAÇÃO DE INTERNAÇÃO HOSPITALAR';
private const TEMPLATE = 'impressoes.template.ambulatorio.encaminhamento-hospitalar';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
return SnappyPdf::loadView(self::TEMPLATE, [
'title' => self::TITLE,
'paciente' => self::getPacienteDataPacienteId($atendimentoId),
'internacao' => self::getInternacaoDataRascunho(),
'cliente' => self::getClienteData(),
'causa_externa' => self::getCausaExternaOptions(),
'usuario' => self::getUsuarioData(),
])
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->setOption('zoom', 0.8)
->inline();
}
return SnappyPdf::loadView(self::TEMPLATE, [
'title' => self::TITLE,
'paciente' => self::getPacienteData(request()->atendimento_id ?? $atendimentoId),
'internacao' => self::getInternacaoData(request()->atendimento_id ?? $atendimentoId),
'cliente' => self::getClienteData(),
'causa_externa' => self::getCausaExternaOptions(),
'usuario'=> self::getUsuarioData()
])
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->setOption('zoom', 0.8)
->inline();
}
private static function getClienteData(){
$cliente = Cliente::where('link', app('config')->get('database.default'))
->where('sistema_id', Sistema::CONECTASUS)
->firstOrFail();
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
$ramoAtividade = $cliente->sistema->ramoAtividade;
$infraestruturaLogada = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
return [
'logotipo' => $logotipo,
'nome' => $cliente->nome,
'ramoAtividade' => $ramoAtividade->nome,
'infraestrutura' => [
'nomeUnidade' => $infraestruturaLogada->unidade->nome_fantasia,
'telefone' => $infraestruturaLogada->telefone,
'endereco' => [
'logradouroNome' => $infraestruturaLogada->endereco->logradouro->nome,
'tipo' => $infraestruturaLogada->endereco->logradouro->tipo->descricao,
'numero' => $infraestruturaLogada->endereco->numero,
'referencia' => $infraestruturaLogada->endereco->referencia,
'bairro' => $infraestruturaLogada->endereco->logradouro->bairro->nome,
'cep'=> $infraestruturaLogada->endereco->logradouro->cep,
'municipio' => $infraestruturaLogada->endereco->logradouro->municipio->nome,
'uf'=> $infraestruturaLogada->endereco->logradouro->municipio->estado->uf
]
]
];
}
private static function getInternacaoData($atendimentoId)
{
$atendimentoSoap = AtendimentoSoap::where('atendimento_id', $atendimentoId)->first();
if (!$atendimentoSoap) {
return request()->has('internacaoHospitalar')
? self::getInternacaoDataRascunho()
: self::getInternacaoDataVazia();
}
$internacao = $atendimentoSoap->encaminhamentos
->where('tipo_id', EncaminhamentoEnum::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR)
->first();
if (!$internacao) {
return request()->has('internacaoHospitalar')
? self::getInternacaoDataRascunho()
: self::getInternacaoDataVazia();
}
return [
'unidade_solicitante' => [
'nome' => $internacao->internacaoHospitalarUnidadeSolicitante->nome_fantasia,
'cnes' => $internacao->internacaoHospitalarUnidadeSolicitante->cnes
],
'unidade_internacao' =>[
'nome'=> null,
'cnes'=> null
],
'principais_sinais_sintomas_clinicos' => $internacao->internacao_hosp_principais_sinais_sintomas_clinicos,
'condicoes_que_justificam_internacao' => $internacao->internacao_hosp_condicoes_que_justificam_internacao,
'principais_resultados_de_provas_diagnosticas' => $internacao->internacao_hosp_principais_resultados_de_provas_diagnosticas,
'cid_principal' => [
'codigo' => MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidPrincipal->codigo),
'nome' => $internacao->InternacaoHospitalarCidPrincipal->nome
],
'cid_secundario' => $internacao->internacao_hospitalar_cid_secundario_id
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidSecundario->codigo)
: '',
'cid_causas_associadas' => $internacao->internacao_hospitalar_cid_causas_associadas_id
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidCausasAssociadas->codigo)
: '',
'procedimento' => self::getProcedimentoData($internacao),
'causas_externas' => [
'causa_externa' => $internacao->internacao_hospitalar_causa_externa_id,
'vinculo_previdencia' => $internacao->internacao_hospitalar_vinculo_previdencia_id,
'cnpj_seguradora' => $internacao->internacao_hospitalar_cnpj_seguradora,
'numero_bilhete' => $internacao->internacao_hospitalar_numero_bilhete,
'serie' => $internacao->internacao_hospitalar_serie,
'cnpj_empresa' => $internacao->internacao_hospitalar_cnpj_empresa,
'cnae_empresa' => $internacao->internacao_hospitalar_cnae_empresa,
'cbor' => $internacao->internacao_hospitalar_cbor,
],
'autorizacao' => self::getAutorizacaoData($internacao)
];
}
private static function getInternacaoDataVazia()
{
return [
'unidade_solicitante' => [
'nome' => null,
'cnes' => null,
],
'unidade_internacao' => [
'nome' => null,
'cnes' => null,
],
'principais_sinais_sintomas_clinicos' => null,
'condicoes_que_justificam_internacao' => null,
'principais_resultados_de_provas_diagnosticas' => null,
'cid_principal' => null,
'cid_secundario' => '',
'cid_causas_associadas' => '',
'procedimento' => [
'procedimento_solicitado' => null,
'data_solicitacao' => null,
'clinica' => null,
'carater_internacao' => null,
'profissional_solicitante_assistente' => null,
'profissional_assistente_documento' => [
'nome' => null,
'numero' => null,
],
],
'causas_externas' => [
'causa_externa' => null,
'vinculo_previdencia' => null,
'cnpj_seguradora' => null,
'numero_bilhete' => null,
'serie' => null,
'cnpj_empresa' => null,
'cnae_empresa' => null,
'cbor' => null,
],
'autorizacao' => [
'profissional_autorizador' => null,
'orgao_codigo_emissor' => null,
'profissional_autorizador_documento' => [
'nome' => null,
'numero' => null,
],
'documento_numero' => null,
'data_autorizacao' => null,
],
];
}
private static function getUsuarioData(){
$lotacaoLogada = self::getCurrentLotacao();
return [
'nome' => $lotacaoLogada->usuario->cidadao->nome,
'unidade' => $lotacaoLogada->infraestrutura->unidade->nome_fantasia,
'data_hora_impressao' => Carbon::now()->format('d/m/Y H:i')
];
}
private static function getPacienteDataPacienteId($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$cidadao = $paciente->cidadao;
return [
'nome' => $cidadao->nome,
'nome_social' => $cidadao->nome_social,
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'prontuario' => $paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
'idade' => $cidadao->data_nascimento
? "{$cidadao->idade['anos']} ano(s) "
. "{$cidadao->idade['meses']} mês(s) "
. "{$cidadao->idade['dias']} dia(s) "
: '',
'sexo' => $cidadao->sexo->descricao,
'raca_cor' => $cidadao->racaCor->descricao ?? '',
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
'nome_mae' => $cidadao->nome_mae,
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
'endereco' => [
'completo' => $cidadao->domicilio
? "{$cidadao->domicilio->endereco->completo}, "
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
: '',
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? '',
],
];
}
private static function getInternacaoDataRascunho()
{
$internacao = request()->internacaoHospitalar ?? [];
$procedimento = $internacao['procedimento'] ?? [];
$causasExternas = $internacao['causasExternas'] ?? [];
$autorizacao = $internacao['autorizacao'] ?? [];
$cidPrincipal = $internacao['cidPrincipal'] ?? null;
$cidSecundarioData = $internacao['cidSecundario'] ?? null;
$cidCausasAssociadasData = $internacao['cidCausasAssociadas'] ?? null;
$cidSecundarioCodigo = null;
if ($cidSecundarioData) {
if (isset($cidSecundarioData['codigo'])) {
$cidSecundarioCodigo = $cidSecundarioData['codigo'];
} elseif (isset($cidSecundarioData['id'])) {
$cid = Cid::find($cidSecundarioData['id']);
$cidSecundarioCodigo = $cid->codigo ?? null;
}
}
$cidCausasAssociadasCodigo = null;
if ($cidCausasAssociadasData) {
if (isset($cidCausasAssociadasData['codigo'])) {
$cidCausasAssociadasCodigo = $cidCausasAssociadasData['codigo'];
} elseif (isset($cidCausasAssociadasData['id'])) {
$cid = Cid::find($cidCausasAssociadasData['id']);
$cidCausasAssociadasCodigo = $cid->codigo ?? null;
}
}
$unidadeSolicitante = !empty($internacao['unidadeSolicitanteId'])
? Unidade::find($internacao['unidadeSolicitanteId'])
: null;
$clinica = !empty($procedimento['clinicaId'])
? AmbulatorioEncaminhamentoClinica::find($procedimento['clinicaId'])
: null;
$caraterInternacao = !empty($procedimento['caraterInternacaoId'])
? AmbulatorioEncaminhamentoCaraterInternacao::find($procedimento['caraterInternacaoId'])
: null;
$documentoTipo = !empty($procedimento['profissionalSolicitanteDocumentoTipoId'])
? DocumentoTipo::find($procedimento['profissionalSolicitanteDocumentoTipoId'])
: null;
$autorizadorDocumentoTipo = !empty($autorizacao['profissionalAutorizadorDocumentoTipoId'])
? DocumentoTipo::find($autorizacao['profissionalAutorizadorDocumentoTipoId'])
: null;
$procedimentoSolicitado = $procedimento['procedimentoSolicitado'] ?? null;
$profissionalSolicitante = $procedimento['profissionalSolicitanteAssistente'] ?? null;
$profissionalAutorizador = $autorizacao['profissionalAutorizador'] ?? null;
return [
'unidade_solicitante' => [
'nome' => $unidadeSolicitante->nome_fantasia ?? null,
'cnes' => $unidadeSolicitante->cnes ?? null,
],
'unidade_internacao' => [
'nome' => null,
'cnes' => null,
],
'principais_sinais_sintomas_clinicos' => $internacao['principaisSinaisSintomasClinicos'] ?? null,
'condicoes_que_justificam_internacao' => $internacao['condicoesQueJustificamInternacao'] ?? null,
'principais_resultados_de_provas_diagnosticas' => $internacao['principaisResultadosDeProvasDiagnosticas'] ?? null,
'cid_principal' => $cidPrincipal ? [
'codigo' => MaskUtil::getCidMasked($cidPrincipal['codigo']),
'nome' => $cidPrincipal['nome'],
] : null,
'cid_secundario' => $cidSecundarioCodigo ? MaskUtil::getCidMasked($cidSecundarioCodigo) : '',
'cid_causas_associadas' => $cidCausasAssociadasCodigo ? MaskUtil::getCidMasked($cidCausasAssociadasCodigo) : '',
'procedimento' => [
'procedimento_solicitado' => $procedimentoSolicitado ? [
'codigo' => MaskUtil::getProcedimentoMasked($procedimentoSolicitado['codigo']),
'nome' => $procedimentoSolicitado['nome'],
] : null,
'data_solicitacao' => !empty($procedimento['dataSolicitacao'])
? Carbon::parse($procedimento['dataSolicitacao'])->format('d/m/Y')
: null,
'clinica' => $clinica->nome ?? null,
'carater_internacao' => $caraterInternacao->nome ?? null,
'profissional_solicitante_assistente' => $profissionalSolicitante['cidadaoNome'] ?? null,
'profissional_assistente_documento' => [
'nome' => $documentoTipo->nome ?? null,
'numero' => ($documentoTipo && !empty($procedimento['profissionalSolicitanteDocumentoNumero']))
? MaskUtil::getDocumentMasked(
$procedimento['profissionalSolicitanteDocumentoTipoId'],
$procedimento['profissionalSolicitanteDocumentoNumero']
)
: null,
],
],
'causas_externas' => [
'causa_externa' => $causasExternas['causaExternaId'] ?? null,
'vinculo_previdencia' => $causasExternas['vinculoPrevidenciaId'] ?? null,
'cnpj_seguradora' => $causasExternas['cnpjSeguradora'] ?? null,
'numero_bilhete' => $causasExternas['numeroBilhete'] ?? null,
'serie' => $causasExternas['serie'] ?? null,
'cnpj_empresa' => $causasExternas['cnpjEmpresa'] ?? null,
'cnae_empresa' => $causasExternas['cnaeEmpresa'] ?? null,
'cbor' => $causasExternas['cbor'] ?? null,
],
'autorizacao' => [
'profissional_autorizador' => $profissionalAutorizador['cidadaoNome'] ?? null,
'orgao_codigo_emissor' => $autorizacao['codigoOrgaoEmissor'] ?? null,
'profissional_autorizador_documento' => [
'nome' => $autorizadorDocumentoTipo->nome ?? null,
'numero' => ($autorizadorDocumentoTipo && !empty($autorizacao['profissionalAutorizadorDocumentoNumero']))
? MaskUtil::getDocumentMasked(
$autorizacao['profissionalAutorizadorDocumentoTipoId'],
$autorizacao['profissionalAutorizadorDocumentoNumero']
)
: null,
],
'documento_numero' => null,
'data_autorizacao' => !empty($autorizacao['dataAutorizacao'])
? Carbon::parse($autorizacao['dataAutorizacao'])->format('d/m/Y')
: null,
],
];
}
private static function getPacienteData($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$cidadao = $atendimento->paciente->cidadao;
return [
'nome' => $cidadao->nome,
'nome_social' => $cidadao->nome_social,
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'prontuario' => $atendimento->paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
'idade' => $cidadao->data_nascimento
? "{$cidadao->idade['anos']} ano(s) "
. "{$cidadao->idade['meses']} mês(s) "
. "{$cidadao->idade['dias']} dia(s) "
: '',
'sexo' => $cidadao->sexo->descricao,
'raca_cor' => $cidadao->racaCor->descricao ?? '',
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
'nome_mae' => $cidadao->nome_mae,
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
'endereco' => [
'completo' => $cidadao->domicilio
? "{$cidadao->domicilio->endereco->completo}, "
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
: '',
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''
]
];
}
private static function getProcedimentoData($internacao)
{
$procedimento = $internacao->internacaoHospitalarProcedimentoSolicitado;
return [
'procedimento_solicitado' => [
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->codigo),
'nome' => $procedimento->nome
],
'data_solicitacao' => (new Carbon($internacao->internacao_hospitalar_data_solicitacao))->format('d/m/Y'),
'clinica' => $internacao->InternacaoHospitalarClinica->nome,
'carater_internacao' => $internacao->InternacaoHospitalarCaraterInternacao->nome,
'profissional_solicitante_assistente' => $internacao->internacaoHospitalarProfissionalSolicitanteAssistente->cidadao->nome,
'profissional_assistente_documento' => [
'nome' => $internacao->internacaoHospitalarProfissionalSolicitanteDocumentoTipo->nome,
'numero' => MaskUtil::getDocumentMasked(
$internacao->internacao_hospitalar_profissional_solicitante_documento_tipo_id,
$internacao->internacao_hospitalar_profissional_solicitante_documento_numero
)
]
];
}
private static function getAutorizacaoData($internacao){
return [
'profissional_autorizador' => optional(optional($internacao->internacaoHospitalarProfissionalAutorizador)->cidadao)->nome,
'orgao_codigo_emissor' => $internacao->internacao_hospitalar_codigo_orgao_emissor,
'profissional_autorizador_documento'=>[
'nome' => optional($internacao->internacaoHospitalarProfissionalAutorizadorDocumentoTipo)->nome,
'numero'=> $internacao->internacao_hospitalar_profissional_autorizador_documento_numero
? MaskUtil::getDocumentMasked(
$internacao->internacao_hospitalar_profissional_autorizador_documento_tipo_id,
$internacao->internacao_hospitalar_profissional_autorizador_documento_numero
)
: null
],
'documento_numero' => $internacao->internacao_hospitalar_documento_numero,
'data_autorizacao' => $internacao->internacao_hospitalar_data_autorizacao
? Carbon::parse($internacao->internacao_hospitalar_data_autorizacao)->format('d/m/Y')
: null
];
}
private static function getCausaExternaOptions()
{
return [
'causas_externas' => AmbulatorioEncaminhamentoCausaExterna::pluck('nome','id'),
'vinculos_previdencia' => AmbulatorioEncaminhamentoVinculoPrevidencia::pluck('nome', 'id')
];
}
}

View File

@@ -0,0 +1,239 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade as EscolaridadeEnum;
use App\Enums\Cadastro\SujeitoAtencao\LocalNascimento;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\CasoSuspeito;
use App\Models\Ambulatorio\CasoSuspeitoFicha;
use App\Models\Cadastro\SujeitoAtencao\Obito;
use App\Models\Intranet\Cliente;
use App\Models\Intranet\Estado;
use App\Models\Intranet\Municipio;
use App\Models\Intranet\Pais;
use App\Models\Sigtap\Cid;
use App\Services\Ambulatorio\AtendimentoService;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
class FichaNotificacaoController extends Controller
{
private const TEMPLATE = 'impressoes.template.ambulatorio.ficha-notificacao';
public function __invoke($atendimentoId)
{
$request = request()->all();
$atendimentoId = $request['atendimento_id'] ?? $atendimentoId;
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$cliente = Cliente::where('link', config('database.default'))->firstOrFail();
if (!isset($request['caso_suspeito_id'])) {
$soapIds = $atendimento->soaps()
->where('is_rascunho', false)
->whereHas('casosSuspeitos')
->pluck('id');
$casoSuspeitoIds = DB::table('ambulatorio_atendimento_soap_caso_suspeito')
->whereIn('soap_id', $soapIds)
->pluck('caso_suspeito_id')
->filter()
->unique()
->values()
->toArray();
} else {
$casoSuspeitoIds = [$request['caso_suspeito_id']];
}
$impressoes = [];
foreach ($casoSuspeitoIds as $casoSuspeitoId) {
$numeroFicha = 1;
$fichaExistente = CasoSuspeitoFicha::where('atendimento_id', $atendimento->id)
->where('caso_suspeito_id', $casoSuspeitoId)
->first();
if ($fichaExistente) {
$numeroFicha = $fichaExistente->numero;
} else {
$ultimaFicha = CasoSuspeitoFicha::orderByDesc('created_at')->orderByDesc('id')->first();
if ($ultimaFicha) {
$numeroFicha = intval($ultimaFicha->numero) + 1;
}
CasoSuspeitoFicha::create([
'atendimento_id' => $atendimento->id,
'caso_suspeito_id' => $casoSuspeitoId,
'numero' => $numeroFicha,
]);
}
$params = $this->montarParametros(
$atendimento,
$paciente,
$cliente,
$casoSuspeitoId,
$numeroFicha,
$request['cid_id'] ?? null
);
$impressoes[] = $params;
}
return view(self::TEMPLATE, compact('impressoes'));
}
private function montarParametros($atendimento, $paciente, $cliente, $casoSuspeitoId, $numeroFicha, $cidId)
{
$municipio = Municipio::find($cliente->municipio_id);
$estado = Estado::find($municipio->estado_id);
$dataAtendimento = Carbon::parse($atendimento->created_at);
$dataAtendimentoArray = str_split($dataAtendimento->format('dmY'));
$dataNascimentoPaciente = $paciente->cidadao->data_nascimento->format('dmY');
$dataNascimentoPacienteArray = str_split($dataNascimentoPaciente);
$sexoPaciente = $paciente->cidadao->sexo->descricao;
$gestantePaciente = null;
if ($paciente->cidadao->sexo_id === Sexo::MASCULINO) {
$gestantePaciente = '6';
} else {
$soap = $atendimento->soaps()->first();
$isGestante = $soap ? AtendimentoService::isPacienteGestante($soap) : false;
if ($isGestante) {
$idadeGestacional = AtendimentoService::getIdadeGestacional($paciente);
if ($idadeGestacional !== null) {
$semanas = $idadeGestacional['semanas'];
if ($semanas <= 13) {
$gestantePaciente = '1';
} elseif ($semanas <= 27) {
$gestantePaciente = '2';
} else {
$gestantePaciente = '3';
}
} else {
$gestantePaciente = '4';
}
} else {
$gestantePaciente = null;
}
}
$racaCorPaciente = null;
switch ($paciente->cidadao->raca_cor_id) {
case RacaCor::BRANCA: $racaCorPaciente = '1'; break;
case RacaCor::NEGRA: $racaCorPaciente = '2'; break;
case RacaCor::AMARELA: $racaCorPaciente = '3'; break;
case RacaCor::PARDA: $racaCorPaciente = '4'; break;
case RacaCor::INDIGENA: $racaCorPaciente = '5'; break;
case RacaCor::SEM_INFORMACAO: $racaCorPaciente = '6'; break;
default: $racaCorPaciente = null; break;
}
$escolaridadePaciente = null;
if (!is_null($paciente->cidadao->escolaridade_id)) {
switch ($paciente->cidadao->escolaridade_id) {
case EscolaridadeEnum::FUNDAMENTAL_INCOMPLETO: $escolaridadePaciente = '1'; break;
case EscolaridadeEnum::FUNDAMENTAL_COMPLETO: $escolaridadePaciente = '4'; break;
case EscolaridadeEnum::MEDIO_INCOMPLETO: $escolaridadePaciente = '5'; break;
case EscolaridadeEnum::MEDIO_COMPLETO: $escolaridadePaciente = '6'; break;
case EscolaridadeEnum::SUPERIOR_GRADUAcao_INCOMPLETO: $escolaridadePaciente = '7'; break;
case EscolaridadeEnum::SUPERIOR_GRADUACAO_COMPLETO: $escolaridadePaciente = '8'; break;
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_INCOMPLETO:
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_INCOMPLETO:
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_INCOMPLETO:
$escolaridadePaciente = '7'; break;
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_COMPLETO:
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_COMPLETO:
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_COMPLETO:
$escolaridadePaciente = '8'; break;
default: $escolaridadePaciente = '9'; break;
}
}
$domicilioPaciente = DB::table('cadastro_domicilio')->where('id', $paciente->cidadao->domicilio_id)->first();
$enderecoPaciente = DB::table('cadastro_endereco')->where('id', $domicilioPaciente->endereco_id)->first();
$logradouroPaciente = DB::table('cadastro_logradouro')->where('id', $enderecoPaciente->logradouro_id)->first();
$logradouroPacienteTipo = DB::table('cadastro_logradouro_tipo')->where('id', $logradouroPaciente->tipo_id)->first();
$municipioPaciente = Municipio::find($logradouroPaciente->municipio_id);
$estadoPaciente = Estado::find($municipioPaciente->estado_id);
$bairroPaciente = DB::table('cadastro_bairro')->where('id', $logradouroPaciente->bairro_id)->first();
$telefonePrincipalPaciente = $paciente->cidadao->telefones->where('principal', true)->first() ?? $paciente->cidadao->telefones->first();
$localNascimentoPaciente = $paciente->cidadao->local_nascimento_id;
$paisPaciente = null;
if ($localNascimentoPaciente === LocalNascimento::EM_OUTRO_PAIS) {
$paisPaciente = Pais::where('id', $estadoPaciente->pais_id)->pluck('nome')->first();
}
$usuarioLogado = self::getCurrentLotacao()->usuario;
$pacienteObito = Obito::where('cidadao_id', $paciente->cidadao_id)->exists();
if (!$cidId) {
$cidId = DB::table('ambulatorio_caso_suspeito_cid')
->where('caso_suspeito_id', $casoSuspeitoId)
->value('cid_id');
}
$cidNome = Cid::where('id', $cidId)->pluck('nome')->first();
$nomeCasoSuspeito = CasoSuspeito::where('id', $casoSuspeitoId)->pluck('nome')->first();
return [
'numero_notificacao' => $numeroFicha,
'nome_caso_suspeito' => $nomeCasoSuspeito,
'data_notificacao' => $dataAtendimentoArray,
'cliente' => [
'estado' => str_split($estado->uf),
'municipio' => $municipio->nome,
'codigo_ibge' => str_split($municipio->ibge),
'nome_unidade' => $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
'codigo_sinan_unidade' => null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'data_nascimento' => $dataNascimentoPacienteArray,
'idade' => null,
'sexo' => substr($sexoPaciente, 0, 1),
'gestante' => $gestantePaciente,
'raca_cor' => $racaCorPaciente,
'escolaridade' => $escolaridadePaciente ?? '9',
'cartao_sus' => str_split($paciente->cidadao->cns),
'nome_mae' => $paciente->cidadao->nome_mae ?? 'DESCONHECE',
'endereco' => [
'estado' => str_split($estadoPaciente->uf),
'municipio' => $municipioPaciente->nome,
'codigo_ibge' => str_split($municipio->ibge),
'distrito' => null,
'bairro' => $bairroPaciente->nome,
'logradouro' => $logradouroPacienteTipo->descricao . " " . $logradouroPaciente->nome,
'numero' => $enderecoPaciente->numero ?? null,
'complemento' => $enderecoPaciente->complemento ?? null,
'referencia' => $enderecoPaciente->referencia ?? null,
'cep' => $logradouroPaciente->cep ? str_split($logradouroPaciente->cep) : null,
'telefone_ddd' => $telefonePrincipalPaciente ? substr($telefonePrincipalPaciente->numero, 0, 2) : null,
'telefone_numero' => $telefonePrincipalPaciente ? str_split(substr($telefonePrincipalPaciente->numero, 2)) : null,
'pais' => $paisPaciente,
],
],
'notificante' => [
'municipio_unidade' => $municipio->nome . "/" . $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
'nome' => $usuarioLogado->cidadao->nome,
'funcao' => self::getCurrentLotacao()->ocupacao->nome,
],
'dados_complementares' => [
'obito' => $pacienteObito ? '1' : '2',
'cid_10' => $cidNome ?? null,
]
];
}
}

View File

@@ -0,0 +1,343 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\ClassificacaoRisco;
use App\Models\Ambulatorio\ParametrizacaoAtendimento;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\Ciap;
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
use App\Models\Sigtap\Cid;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
class FichaRequisicaoServicoAuxiliarDiagnoseTerapiaController extends Controller
{
public function __invoke($atendimentoId, $dados = [])
{
$impressao = null;
$parametrizacao = ParametrizacaoAtendimento::first();
if (!is_null($parametrizacao) && $parametrizacao->modelo_impressao_sadt === 'especifico') {
$impressao = 'impressoes.template.ambulatorio.ficha-requisicao-servico-auxiliar-diagnose-terapia-especifico';
} else {
$impressao = 'impressoes.template.ambulatorio.ficha-requisicao-servico-auxiliar-diagnose-terapia-padrao';
}
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$dadosNaoSalvos = self::getDadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(
request()->atendimento_id,
AtendimentoImpressaoTipo::FICHA_DE_REQUISICAO_DE_SERVICOS_AUXILIARES_DE_DIAGOSE_E_TERAPIA_SADT
);
return SnappyPdf::loadView($impressao, $dadosNaoSalvos)
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-bottom', 0)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 6)
->setPaper('a4')
->inline();
} else {
return SnappyPdf::loadView($impressao, self::getAtendimento($atendimentoId, $dados))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-bottom', 0)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 6)
->setPaper('a4')
->inline();
}
}
public static function getDadosNaoSalvos($pacienteId)
{
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$solicitacoesExames = collect();
foreach ((request()->exames ?? request()->procedimentos_cirurgicos) as $item) {
$itens[] = [
'codigo' => $item['codigo'],
'nome' => $item['nome'],
];
};
$classificacaoRisco = ClassificacaoRisco::findOrFail(request()->classificacao_risco_id)->descricao_encaminhamento ?? null;
$solicitacoesExames->push([
'data' =>Carbon::now()->format('d/m/Y') ?? null,
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : null,
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : null,
'justificativa' => request()->justificativa,
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->observacao,
'itens' => $itens,
'usuario_origem' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
. $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: null,
],
]);
$dataNascimento = Carbon::parse($paciente->cidadao->data_nascimento);
$dataCriacao = Carbon::parse(Carbon::now()->format('Y-m-d'));
$diferenca = $dataNascimento->diff($dataCriacao);
$idade = [];
if ($diferenca->y > 0) {
$idade[] = $diferenca->y . ' ' . ($diferenca->y === 1 ? 'ano' : 'anos');
}
if ($diferenca->m > 0) {
$idade[] = $diferenca->m . ' ' . ($diferenca->m === 1 ? 'mês' : 'meses');
}
if ($diferenca->d > 0) {
$idade[] = $diferenca->d . ' ' . ($diferenca->d === 1 ? 'dia' : 'dias');
}
return [
'paraAssinar' => false,
'requisitante' => [
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
],
'paciente' => [
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
'data_nascimento' => is_null($paciente->cidadao->data_nascimento)
? null
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmy'),
'sexo_masculino' => is_null($paciente->cidadao->sexo_id)
? null : $paciente->cidadao->sexo_id === Sexo::MASCULINO,
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $paciente->cidadao->domicilio->endereco->numero ?? null,
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero ?? false,
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $paciente->cidadao->domicilio
? $paciente->cidadao->domicilio->endereco->logradouro->cep
: null,
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'idade' => implode(', ', $idade),
'cns' => $paciente->cidadao->cns ?? null,
'cpf' => $paciente->cidadao->cpf ?? null,
'prontuario' => $paciente->prontuario
? str_pad($paciente->prontuario, 8, '0', STR_PAD_LEFT)
: null,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
'unidade_referencia_cnes' => $paciente->unidade->cnes ?? null,
'nome_mae' => $paciente->cidadao->nome_mae ?? null,
],
'solicitacoes' => $solicitacoesExames,
];
}
public static function getAtendimento($atendimentoId, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$solicitacoesProcedimentosCirurgicos = collect();
$regulacaoData = self::getRegulacaoData();
if (!isset($dados['itens'])) {
$dados['itens'] = request()->itens;
}
$atendimento->soaps()
->where('is_rascunho', false)
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
->get()
->each(function ($soap) use ($solicitacoesExames, $solicitacoesProcedimentosCirurgicos, $regulacaoData, $dados) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames, $regulacaoData, $dados) {
$itens = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->when(isset($dados['itens']), fn ($q) => $q->whereIn('id', collect($dados['itens'])->where('origem', 'exame')->pluck('id')))
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('exame_id', $ids))
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::IMAGEM))
->get()
->map(fn ($item) => [
'codigo' => $item->exame->codigo,
'nome' => $item->exame->nome,
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$classificacaoRisco = $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
'justificativa' => $solicitacao->justificativa,
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . ($solicitacao->observacao ?? null),
'itens' => $itens,
'usuario_origem' => [
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
. $solicitacao->createdLotacao->ocupacao->nome,
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
: null,
],
]);
}
});
if (!isset(request()->solicitacao_exame_item_id) && !$regulacaoData['exames_ids']) {
$soap->solicitacoesProcedimentosCirurgicos->each(function ($solicitacao) use ($solicitacoesProcedimentosCirurgicos, $dados) {
$itens = $solicitacao->itens()
->when(isset($dados['itens']), fn ($q) => $q->whereIn('id', collect($dados['itens'])->where('origem', 'procedimento_cirurgico')->pluck('id')))
->get()
->map(fn ($item) => [
'codigo' => $item->procedimentoCirurgico->procedimento_codigo,
'nome' => $item->procedimentoCirurgico->nome,
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$classificacaoRisco = $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null;
$solicitacoesProcedimentosCirurgicos->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
'justificativa' => $solicitacao->justificativa,
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . ($solicitacao->observacao ?? null),
'itens' => $itens,
'usuario_origem' => [
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
. $solicitacao->createdLotacao->ocupacao->nome,
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
: null,
],
]);
}
});
}
});
$dataNascimento = Carbon::parse($atendimento->paciente->cidadao->data_nascimento);
$dataCriacao = Carbon::parse($atendimento->created_at);
$diferenca = $dataNascimento->diff($dataCriacao);
$idade = [];
if ($diferenca->y > 0) {
$idade[] = $diferenca->y . ' ' . ($diferenca->y === 1 ? 'ano' : 'anos');
}
if ($diferenca->m > 0) {
$idade[] = $diferenca->m . ' ' . ($diferenca->m === 1 ? 'mês' : 'meses');
}
if ($diferenca->d > 0) {
$idade[] = $diferenca->d . ' ' . ($diferenca->d === 1 ? 'dia' : 'dias');
}
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
return [
'paraAssinar' => $paraAssinaturaEletronica,
'requisitante' => [
'unidade' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->nome_fantasia,
'cnes' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->cnes,
],
'paciente' => [
'rg' => $atendimento->paciente->cidadao->carteiraIdentidade->numero ?? null,
'data_nascimento' => is_null($atendimento->paciente->cidadao->data_nascimento)
? null
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmy'),
'sexo_masculino' => is_null($atendimento->paciente->cidadao->sexo_id)
? null : $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
'nome' => $atendimento->paciente->cidadao->nome,
'nome_social' => $atendimento->paciente->cidadao->nome_social,
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $atendimento->paciente->cidadao->domicilio->endereco->numero ?? null,
'sem_numero' => $atendimento->paciente->cidadao->domicilio->endereco->sem_numero ?? null,
'complemento' => $atendimento->paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $atendimento->paciente->cidadao->domicilio
? $atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep
: null,
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'idade' => implode(', ', $idade),
'cns' => $atendimento->paciente->cidadao->cns ?? null,
'cpf' => $atendimento->paciente->cidadao->cpf ?? null,
'prontuario' => $atendimento->paciente->prontuario
? str_pad($atendimento->paciente->prontuario, 8, '0', STR_PAD_LEFT)
: null,
'telefones' => $atendimento->paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $atendimento->paciente->unidade->nome_fantasia ?? null,
'unidade_referencia_cnes' => $atendimento->paciente->unidade->cnes ?? null,
'nome_mae' => $atendimento->paciente->cidadao->nome_mae ?? null,
],
'solicitacoes' => $solicitacoesExames->concat($solicitacoesProcedimentosCirurgicos),
];
}
private static function getRegulacaoData()
{
$regulacaoData = [
'soap_id' => null,
'exames_ids' => null,
];
if (request()->regulacao_solicitacao_id) {
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
}
return $regulacaoData;
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
class ImpressaoAssinadoController extends Controller
{
public function __invoke($atendimentoId)
{
$path = 'assinatura-eletronica' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . 'ambulatorio' . DIRECTORY_SEPARATOR . 'atendimento';
$fileName = request()->tipo;
$arquivo = "{$fileName}-{$atendimentoId}.PDF";
$headers = [
'Content-Type' => 'application/pdf',
];
$filePath = Storage::path( $path . DIRECTORY_SEPARATOR . $arquivo);
return response()->download($filePath, $arquivo, $headers);
}
}

View File

@@ -0,0 +1,247 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Impressao\Ambulatorio\AtendimentoController;
use App\Http\Controllers\Impressao\Ambulatorio\DeclaracaoComparecimentoController;
use App\Http\Controllers\Impressao\Ambulatorio\ReceitaMedicaComumController;
use App\Http\Controllers\Impressao\Ambulatorio\RequisicaoExameCitopatologicoColoUteroController;
use App\Http\Controllers\Impressao\Ambulatorio\RequisicaoMamografiaController;
use App\Http\Controllers\Impressao\Ambulatorio\ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController;
use App\Utils\Exports\PhpMerge;
class ImpressaoGeralController extends Controller
{
public function __invoke($atendimentoId)
{
$pdfPaths = [];
collect(request()->all())->each(function ($impressao) use ($atendimentoId, &$pdfPaths) {
$impressao = (array) $impressao;
$identificador = $impressao[0];
$dados = $impressao[1] ?? [];
if ($identificador === 'posConsulta') {
$posConsulta = new PosConsultaController();
$pdfPaths[] = [
'data' => $posConsulta($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'preAtendimento') {
$preAtendimento = new PreAtendimentoController();
$pdfPaths[] = [
'data' => $preAtendimento($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'atendimento') {
$atendimento = new AtendimentoController();
$pdfPaths[] = [
'data' => $atendimento($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'atestado') {
$atestado = new AtestadoController();
$pdfPaths[] = [
'data' => $atestado($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'cartaMedica') {
$cartaMedica = new CartaMedicaController();
$pdfPaths[] = [
'data' => $cartaMedica($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'declaracaoComparecimento') {
$declaracaoComparecimento = new DeclaracaoComparecimentoController();
$pdfPaths[] = [
'data' => $declaracaoComparecimento($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'encaminhamento') {
$encaminhamento = new EncaminhamentoController();
$pdfPaths[] = [
'data' => $encaminhamento($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'encaminhamentoHospitalar') {
$encaminhamento = new EncaminhamentoHospitalarController();
$pdfPaths[] = [
'data' => $encaminhamento($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'orientacao') {
$orientacao = new OrientacaoController();
$pdfPaths[] = [
'data' => $orientacao($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'receitaMedicaComum') {
$receitaMedicaComum = new ReceitaMedicaComumController();
$pdfPaths[] = [
'data' => $receitaMedicaComum($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'receitaMedicaEspecial') {
$receitaMedicaEspecial = new ReceitaMedicaEspecialController();
$pdfPaths[] = [
'data' => $receitaMedicaEspecial($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'receitaMedicaEspecialAmarela') {
$receitaMedicaEspecialAmarela = new ReceitaMedicaEspecialAmarelaController();
$pdfPaths[] = [
'data' => $receitaMedicaEspecialAmarela($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'receitaMedicaEspecialAzul') {
$receitaMedicaEspecialAzul = new ReceitaMedicaEspecialAzulController();
$pdfPaths[] = [
'data' => $receitaMedicaEspecialAzul($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'receitaMedicaNaoPadronizadaComum') {
$receitaMedicaNaoPadronizadaComum = new ReceitaMedicaNaoPadronizadaComumController();
$pdfPaths[] = [
'data' => $receitaMedicaNaoPadronizadaComum($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'receitaMedicaNaoPadronizadaEspecial') {
$receitaMedicaNaoPadronizadaEspecial = new ReceitaMedicaNaoPadronizadaEspecialController();
$pdfPaths[] = [
'data' => $receitaMedicaNaoPadronizadaEspecial($atendimentoId, true, $dados),
'orientation' => 'L'
];
}
if ($identificador === 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame') {
$servicoAnaliseDiagnosticoTerapiaSolicitacaoExame = new ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController();
$pdfPaths[] = [
'data' => $servicoAnaliseDiagnosticoTerapiaSolicitacaoExame($atendimentoId, $dados),
'orientation' => 'P'
];
}
if ($identificador === 'laudoMedicamentos') {
$laudoMedicamentos = new LaudoMedicamentosController();
$pdfPaths[] = [
'data' => $laudoMedicamentos($atendimentoId, true, $dados),
'orientation' => 'P'
];
}
if ($identificador === 'requisicaoExameCitopatologicoColoUtero') {
$requisicaoExameCitopatologicoColoUtero = new RequisicaoExameCitopatologicoColoUteroController();
$pdfPaths[] = [
'data' => $requisicaoExameCitopatologicoColoUtero($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'requisicaoExameCitopatologicoMama') {
$requisicaoExameCitopatologicoMama = new RequisicaoExameCitopatologicoMamaController();
$pdfPaths[] = [
'data' => $requisicaoExameCitopatologicoMama($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'requisicaoExameHistopatologicoMamografia') {
$requisicaoExameHistopatologicoMamografia = new RequisicaoExameHistopatologicoMamografiaController();
$pdfPaths[] = [
'data' => $requisicaoExameHistopatologicoMamografia($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'requisicaoMamografia') {
$requisicaoMamografia = new RequisicaoMamografiaController();
$pdfPaths[] = [
'data' => $requisicaoMamografia($atendimentoId),
'orientation' => 'P'
];
}
if ($identificador === 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia') {
$fichaRequisicaoServicoAuxiliarDiagnoseTerapia = new FichaRequisicaoServicoAuxiliarDiagnoseTerapiaController();
$pdfPaths[] = [
'data' => $fichaRequisicaoServicoAuxiliarDiagnoseTerapia($atendimentoId, $dados),
'orientation' => 'P'
];
}
if ($identificador === 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial') {
$laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial = new LaudoSolicitacaoAutorizacaoProcedimentoAmbulatorialController();
$pdfPaths[] = [
'data' => $laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial($atendimentoId, $dados),
'orientation' => 'P'
];
}
if ($identificador === 'laudoMChatR') {
$laudoMChatR = new LaudoMChatRController();
$pdfPaths[] = [
'data' => $laudoMChatR($atendimentoId),
'orientation' => 'P'
];
}
});
return PhpMerge::mergePdfDocuments('Impressões', $pdfPaths);
}
}

View File

@@ -0,0 +1,72 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\PuericulturaQuestionarioMChatR;
use App\Utils\Exports\Pdf1;
class LaudoMChatRController extends Controller
{
private const TITLE = 'LAUDO M-CHAT-R';
private const TEMPLATE = 'ambulatorio.laudo-m-chat-r';
public function __invoke($atendimentoId, $soapId = null)
{
$laudos = collect();
$atendimento = Atendimento::findOrFail($atendimentoId);
$atendimento->soaps()
->where('is_rascunho', false)
->when($soapId, fn ($q) => $q->where('id', $soapId))
->whereHas('puericulturaQuestionarioMChatR')->get()->each(function ($soap) use (&$laudos) {
$paciente = $soap->atendimento->paciente;
$questionario = PuericulturaQuestionarioMChatR::orderBy('id')->get()->map(function ($query) use ($soap) {
$resposta = $soap->puericulturaQuestionarioMChatR()
->where('questionario_m_chat_r_id', $query->id)
->first();
return [
'id' => $query->id,
'descricao' => $query->descricao,
'valor_resposta_sim' => $query->valor_resposta_sim,
'valor_resposta_nao' => $query->valor_resposta_nao,
'pergunta' => $query->descricao,
'resposta' => $resposta->resposta,
];
});
$score = $questionario->reduce(function ($total, $query) {
$valor = $query['resposta']
? $query['valor_resposta_sim']
: $query['valor_resposta_nao'];
return $total + $valor;
}, 0);
$classificacao = null;
if ($score <= 2) {
$classificacao = 'Baixo risco';
} elseif ($score >= 3 && $score <= 7) {
$classificacao = 'Risco moderado';
} elseif ($score >= 8) {
$classificacao = 'Alto risco';
}
$laudos->push([
'data_hora_atendimento' => $soap->created_at->format('d/m/Y \à\s H:i'),
'paciente_nome' => $paciente->cidadao->nome,
'paciente_idade' => $paciente->cidadao->idadeFormatada,
'questionario' => $questionario,
'score' => $score,
'classificacao' => $classificacao,
]);
});
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('laudos'));
}
}

View File

@@ -0,0 +1,396 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Geral\MedidaTempo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class LaudoMedicamentosController extends Controller
{
private const TITLE = 'Laudo de Medicamentos (LME)';
private const TEMPLATE = 'ambulatorio.laudo-medicamentos';
public static function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function getReceitasNaoSalvas($pacienteId) {
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
$medicamentos = request()->medicamentos;
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
$query
->whereHas('soap', function ($query) {
$query->where('atendimento_id', request()->atendimento_id);
});
})
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
->first();
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
$createdAt = $item->created_at;
} else {
$currentLotacao = self::getCurrentLotacao();
}
$paciente = Paciente::where('id', $pacienteId)->first();
$medicamentos = [];
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$medicamentos[] = [
'id' => uniqid(),
'nome' => $solicitacao['material']['descricao'],
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null),
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : '',
'quantidade' => self::calcularUso($solicitacao)
];
}
} else {
$medicamentos[] = [
'id' => uniqid(),
'nome' => request()->material['descricao'],
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => request()->recomendacoes ?? '',
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
];
}
$medicamentos = collect($medicamentos)->sortBy('usoContinuo')->values();
$celular = $paciente->cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
return [
'isEspecial' => true,
'cid' => request()->cid ?? null,
'diagnostico' => request()->diagnostico ? trim(preg_replace('/\s+/', ' ', strip_tags(request()->diagnostico))) : null,
'anamnese' => request()->anamnese ? trim(preg_replace('/\s+/', ' ', strip_tags(request()->anamnese))) : null,
'tratamento_previo' => [
'status' => request()->tratamento_previo['status'],
'relatar' => request()->tratamento_previo['relatar']
],
'profissional' => [
'nome' => $currentLotacao->usuario->cidadao->nome,
'cbo' => $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
'cns' => $currentLotacao->usuario->cidadao->cns,
],
'unidade' => [
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
'nome' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'celular' => $celular ? MaskUtil::getPhoneMasked($celular) : null,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'email' => $paciente->email ?? null,
'nome_mae' => $paciente->cidadao->nome_mae ? $paciente->cidadao->nome_mae : null,
'is_raca_cor_branca' =>$paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' =>$paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' =>$paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' =>$paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' =>$paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 20),
'peso' => str_replace('.', ',' ,request()->peso),
'altura' => request()->altura,
],
'dataCadastro' => [
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
: Carbon::now()->translatedFormat('d \de F \de Y'),
'data' => request()->has('is_duplicated') && request()->is_duplicated == true
? Carbon::parse($createdAt)->translatedFormat('d/m/Y')
: Carbon::now()->translatedFormat('d/m/Y'),
],
'medicamentos' => $medicamentos,
];
}
private static function calcularUso($medicamento)
{
$duracaoMedidaTempoId = $medicamento['duracao_medida_tempo_id'] ?? null;
$intervaloMedidaTempoId = $medicamento['intervalo_medida_tempo_id'] ?? null;
$duracao = isset($medicamento['duracao']) ? (float) $medicamento['duracao'] : 0;
$intervalo = isset($medicamento['intervalo']) ? (float) $medicamento['intervalo'] : 1;
$frequenciaVezes = isset($medicamento['frequencia_vezes']) ? (int) $medicamento['frequencia_vezes'] : 1;
$dose = isset($medicamento['dose']) ? (float) $medicamento['dose'] : 1;
$materialQuantidade = isset($medicamento['material']['quantidade']) ? (float) $medicamento['material']['quantidade'] : 1;
if ($duracaoMedidaTempoId == MedidaTempo::SEMANAS) {
$duracaoDias = $duracao * 7;
} elseif ($duracaoMedidaTempoId == MedidaTempo::MESES) {
$duracaoDias = $duracao * 30;
} elseif ($duracaoMedidaTempoId == MedidaTempo::ANOS) {
$duracaoDias = $duracao * 365;
} else {
$duracaoDias = $duracao; // padrão: dias
}
if ($intervaloMedidaTempoId == MedidaTempo::SEMANAS) {
$intervaloDias = $intervalo * 7;
} elseif ($intervaloMedidaTempoId == MedidaTempo::MESES) {
$intervaloDias = $intervalo * 30;
} elseif ($intervaloMedidaTempoId == MedidaTempo::ANOS) {
$intervaloDias = $intervalo * 365;
} else {
$intervaloDias = $intervalo;
}
if ($intervaloDias <= 0) {
$intervaloDias = 1;
}
$totalDoses = ceil($duracaoDias / $intervaloDias) * $frequenciaVezes * $dose;
$duracaoMeses = round($duracaoDias / 30, 2);
$mesesCompletos = floor($duracaoDias / 30);
$diasRestantes = $duracaoDias - ($mesesCompletos * 30);
$usoPorMes = [];
for ($i = 1; $i <= $mesesCompletos; $i++) {
$usoPorMes["mes_{$i}"] = ceil(30 / $intervaloDias) * $frequenciaVezes * $dose;
}
if ($diasRestantes > 0) {
$usoPorMes["mes_" . ($mesesCompletos + 1)] = ceil($diasRestantes / $intervaloDias) * $frequenciaVezes * $dose / $materialQuantidade;
}
return [
'total_doses' => $totalDoses,
'duracao_meses' => $duracaoMeses,
'uso_por_mes' => $usoPorMes,
];
}
private static function getAtendimentoProblemasCondicoes($soap)
{
$problemasCondicoes = $soap->problemasCondicoes()
->with([
'cid:id,codigo,nome',
])
->first([
'cid_id',
]);
return $problemasCondicoes['cid']['codigo'];
}
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$celular = $paciente->cidadao->telefones
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
$atendimento->soaps()->where('is_rascunho', false)->get()
->filter(fn ($soap) => self::requiredFieldAtendimento($soap))
->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
->push([
'isEspecial' => true,
'diagnostico' => $soap->prescricoesMedicamentos->first()->diagnostico,
'anamnese' => $soap->prescricoesMedicamentos->first()->anamnese,
'tratamento_previo' => [
'status' => $soap->prescricoesMedicamentos->first()->tratamento_previo_status,
'relatar' => $soap->prescricoesMedicamentos->first()->tratamento_previo_relatar,
],
'cid' => self::getAtendimentoProblemasCondicoes($soap),
'profissional' => [
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
'cns' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->cns,
],
'unidade' => [
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
'cnes' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnes,
'nome' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'celular' => $celular ? MaskUtil::getPhoneMasked($celular) : null,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'email' => $paciente->email ?? null,
'nome_mae' => $paciente->cidadao->nome_mae ? $paciente->cidadao->nome_mae : null,
'is_raca_cor_branca' =>$paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' =>$paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' =>$paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' =>$paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' =>$paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 20),
'peso' => str_replace('.', ',' , DB::table('ambulatorio_atendimento_antropometria')
->where('soap_id', $soap->id)
->value('peso')
),
'altura' => DB::table('ambulatorio_atendimento_antropometria')
->where('soap_id', $soap->id)
->value('altura'),
],
'dataCadastro' => [
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
'data' => Carbon::parse($prescricaoMedicamento->created_at)->translatedFormat('d/m/Y')
],
'medicamentos' => $prescricaoMedicamento->itens
->whereNotIn('material.receita_tipo_id', [
TipoReceita::COMUM
])
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
->map(fn ($item) => [
'id' => $item->id,
'nome' => $item->material->descricao
?? ($item->descricao ?? ''),
'usoContinuo' => $item->is_uso_continuo,
'imprimirSeparado' => $item->is_imprimir_separado,
'removerImpressao' => $item->is_remover_impressao,
'doseUnica' => $item->is_dose_unica,
'livre' => !is_null($item->descricao),
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? '',
'quantidade' => self::calcularUso($item)
])
->sortBy('usoContinuo')
->values(),
])
));
}
private static function requiredFieldAtendimento($soap)
{
$peso = DB::table('ambulatorio_atendimento_antropometria')
->where('soap_id', $soap->id)
->value('peso');
$altura = DB::table('ambulatorio_atendimento_antropometria')
->where('soap_id', $soap->id)
->value('altura');
$diagnostico = $soap->avaliacao_descricao
? trim(preg_replace('/\s+/', ' ', strip_tags($soap->avaliacao_descricao)))
: null;
$cid = collect(self::getAtendimentoProblemasCondicoes($soap))->first();
if ($peso && $altura && $diagnostico && $cid) {
return true;
}
return false;
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,471 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Sigtap\Complexidade;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\ClassificacaoRisco;
use App\Models\Ambulatorio\ParametrizacaoAtendimento;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
use App\Services\Ambulatorio\AtendimentoService;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class LaudoSolicitacaoAutorizacaoProcedimentoAmbulatorialController extends Controller
{
public function __invoke($atendimentoId, $dados = [])
{
if (request()->dados) {
return self::imprimeNaoSalvo();
}
if (!isset($dados['itens'])) {
$dados['itens'] = request()->itens;
}
$solicitacoesExames = [];
$solicitacoesProcedimentosCirurgicos = [];
$impressao = null;
$parametrizacao = ParametrizacaoAtendimento::first();
$isEspecifico = !is_null($parametrizacao) && $parametrizacao->modelo_impressao_apac === 'especifico';
$regulacaoData = self::getRegulacaoData();
DB::table('ambulatorio_atendimento_soap_solicitacao_exame_item')
->select([
'ambulatorio_atendimento_soap_solicitacao_exame_item.solicitacao_exame_id',
'cadastro_unidade.nome_fantasia AS estabelecimento_saude_solicitante_nome',
'cadastro_unidade.cnes AS estabelecimento_saude_solicitante_cnes',
'cadastro_cidadao.nome AS paciente_nome',
'cadastro_cidadao.nome_social AS paciente_nome_social',
DB::raw("
CASE cadastro_cidadao.sexo_id WHEN " . Sexo::MASCULINO . " THEN
'M'
WHEN " . Sexo::FEMININO . " THEN
'F'
ELSE
NULL
END AS paciente_sexo
"),
'cadastro_paciente.prontuario AS paciente_prontuario',
'cadastro_cidadao.cns AS paciente_cns',
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
'cadastro_raca_cor.descricao AS paciente_raca_cor',
'cadastro_cidadao.nome_mae AS paciente_nome_mae',
DB::raw("
(
SELECT numero
FROM cadastro_cidadao_telefone
WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id
AND cadastro_cidadao_telefone.principal = TRUE
AND cadastro_cidadao_telefone.DELETED_AT IS NULL
LIMIT 1
) AS paciente_telefone
"),
DB::raw("
CONCAT(
cadastro_logradouro_tipo.descricao,
', ',
cadastro_logradouro.nome,
', ',
CASE WHEN cadastro_endereco.numero IS NULL THEN 'S/N' ELSE cadastro_endereco.numero END,
', ',
cadastro_bairro.nome
) AS paciente_rua_numero_bairro
"),
'cadastro_municipio.nome AS paciente_municipio_residencia',
'cadastro_municipio.ibge AS paciente_codigo_ibge_municipio',
'cadastro_estado.uf AS paciente_uf',
'cadastro_logradouro.cep AS paciente_cep',
'ambulatorio_atendimento_soap_solicitacao_exame_item.id AS solicitacao_exame_item_id',
'parametrizacao_exame.codigo AS exame_codigo',
'parametrizacao_exame.nome AS exame_nome',
'ambulatorio_atendimento_soap_solicitacao_exame.justificativa AS justificativa_procedimento_solicitado_descricao_diagnostico',
'cid.codigo AS justificativa_procedimento_solicitado_cid_codigo',
'cid.nome AS justificativa_procedimento_solicitado_cid_nome',
'geral_ciap.codigo AS observacao_procedimento_solicitado_ciap_codigo',
'geral_ciap.descricao AS observacao_procedimento_solicitado_ciap_descricao',
'ambulatorio_atendimento_soap_solicitacao_exame.observacao AS justificativa_procedimento_solicitado_observacoes',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
DB::raw("DATE_FORMAT(ambulatorio_atendimento_soap_solicitacao_exame.created_at, '%d/%m/%Y') AS solicitacao_data_solicitacao"),
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN 'cns' ELSE 'cpf' END AS solicitacao_documento"),
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN cadastro_cidadao_usuario.cns ELSE cadastro_cidadao_usuario.cpf END AS solicitacao_numero_documento"),
'ambulatorio_classificacao_risco.descricao_encaminhamento AS classificacao_risco_descricao_encaminhamento'
])
->join('ambulatorio_atendimento_soap_solicitacao_exame', 'ambulatorio_atendimento_soap_solicitacao_exame.id', 'ambulatorio_atendimento_soap_solicitacao_exame_item.solicitacao_exame_id')
->join('ambulatorio_atendimento_soap', 'ambulatorio_atendimento_soap.id', 'ambulatorio_atendimento_soap_solicitacao_exame.soap_id')
->join('ambulatorio_atendimento', 'ambulatorio_atendimento.id', 'ambulatorio_atendimento_soap.atendimento_id')
->join('parametrizacao_exame', 'parametrizacao_exame.id', 'ambulatorio_atendimento_soap_solicitacao_exame_item.exame_id')
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'ambulatorio_atendimento_soap_solicitacao_exame.created_centro_custo_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
->leftJoin('ambulatorio_agendamento', 'ambulatorio_agendamento.id', 'ambulatorio_atendimento.agendamento_id')
->leftJoin('ambulatorio_demanda_espontanea', 'ambulatorio_demanda_espontanea.id', 'ambulatorio_atendimento.demanda_espontanea_id')
->leftJoin('cadastro_paciente', 'cadastro_paciente.id', DB::raw("COALESCE(ambulatorio_agendamento.paciente_id, ambulatorio_demanda_espontanea.paciente_id)"))
->leftJoin('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('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
->leftJoin('sigtap.cid', 'cid.id', 'ambulatorio_atendimento_soap_solicitacao_exame.cid_id')
->leftJoin('geral_ciap', 'geral_ciap.id', 'ambulatorio_atendimento_soap_solicitacao_exame.ciap_id')
->leftJoin('cadastro_lotacao', 'cadastro_lotacao.id', 'ambulatorio_atendimento_soap_solicitacao_exame.created_lotacao_id')
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
->leftJoin('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
->leftJoin('ambulatorio_classificacao_risco', 'ambulatorio_classificacao_risco.id', 'ambulatorio_atendimento_soap_solicitacao_exame.classificacao_risco_id')
->where('ambulatorio_atendimento_soap.is_rascunho', false)
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q
->where('ambulatorio_atendimento_soap_solicitacao_exame_item.id', request()->solicitacao_exame_item_id))
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('ambulatorio_atendimento_soap.id', $id))
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('parametrizacao_exame.id', $ids))
->when(isset($dados['itens']), fn ($q) => $q->whereIn('ambulatorio_atendimento_soap_solicitacao_exame_item.id', collect($dados['itens'])->where('origem', 'exame')->pluck('id')))
->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento')
->where('complexidade', Complexidade::ALTA_COMPLEXIDADE)
->whereColumn('procedimento.codigo', 'parametrizacao_exame.codigo')
->orderByDesc('competencia_id')
->limit(1);
})
->where('ambulatorio_atendimento.id', $atendimentoId)
->get()
->each(function($query) use (&$solicitacoesExames, $isEspecifico) {
$solicitacoesExames[$query->solicitacao_exame_id] = [
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
'estabelecimento_saude_solicitante' => [
'nome' => $query->estabelecimento_saude_solicitante_nome,
'cnes' => Str::padRight($query->estabelecimento_saude_solicitante_cnes, 7),
],
'paciente' => [
'nome' => $query->paciente_nome,
'nome_social' => $query->paciente_nome_social,
'sexo' => $query->paciente_sexo,
'prontuario' => $query->paciente_prontuario,
'cns' => Str::padRight($query->paciente_cns, 15),
'data_nascimento' => $query->paciente_data_nascimento,
'raca_cor' => $query->paciente_raca_cor,
'nome_mae' => $query->paciente_nome_mae,
'telefone' => Str::padRight($query->paciente_telefone, 10),
'rua_numero_bairro' => $query->paciente_rua_numero_bairro,
'municipio_residencia' => $query->paciente_municipio_residencia,
'codigo_ibge_municipio' => $query->paciente_codigo_ibge_municipio,
'uf' => Str::padRight($query->paciente_uf, 2),
'cep' => Str::padRight($query->paciente_cep, 8),
],
'itens' => [],
'justificativa_procedimento_solicitado' => [
'descricao_diagnostico' => Str::substr(
($isEspecifico && $query->classificacao_risco_descricao_encaminhamento
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
) . $query->justificativa_procedimento_solicitado_descricao_diagnostico,
0,
290
),
'cid_codigo' => $query->justificativa_procedimento_solicitado_cid_codigo,
'cid_nome' => $query->justificativa_procedimento_solicitado_cid_nome,
'ciap_codigo' => $query->observacao_procedimento_solicitado_ciap_codigo,
'ciap_descricao' => $query->observacao_procedimento_solicitado_ciap_descricao,
'observacoes' => (!$isEspecifico && $query->classificacao_risco_descricao_encaminhamento
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
) . $query->justificativa_procedimento_solicitado_observacoes,
],
'solicitacao' => [
'nome_profissional_solicitante' => $query->solicitacao_nome_profissional_solicitante,
'data_solicitacao' => $query->solicitacao_data_solicitacao,
'documento' => $query->solicitacao_documento,
'numero_documento' => Str::padRight($query->solicitacao_numero_documento, 15),
],
];
})
->each(function($query) use (&$solicitacoesExames) {
$solicitacoesExames[$query->solicitacao_exame_id]['itens'][] = [
'codigo' => Str::padRight($query->exame_codigo, 10),
'nome' => $query->exame_nome,
'quantidade' => 1,
];
});
if (!isset(request()->solicitacao_exame_item_id) && !$regulacaoData['exames_ids']) {
DB::table('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item')
->select([
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id',
'cadastro_unidade.nome_fantasia AS estabelecimento_saude_solicitante_nome',
'cadastro_unidade.cnes AS estabelecimento_saude_solicitante_cnes',
'cadastro_cidadao.nome AS paciente_nome',
'cadastro_cidadao.nome_social AS paciente_nome_social',
DB::raw("
CASE cadastro_cidadao.sexo_id WHEN " . Sexo::MASCULINO . " THEN
'M'
WHEN " . Sexo::FEMININO . " THEN
'F'
ELSE
NULL
END AS paciente_sexo
"),
'cadastro_paciente.prontuario AS paciente_prontuario',
'cadastro_cidadao.cns AS paciente_cns',
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
'cadastro_raca_cor.descricao AS paciente_raca_cor',
'cadastro_cidadao.nome_mae AS paciente_nome_mae',
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 paciente_telefone
"),
DB::raw("
CONCAT(
cadastro_logradouro_tipo.descricao,
', ',
cadastro_logradouro.nome,
', ',
CASE WHEN cadastro_endereco.numero IS NULL THEN 'S/N' ELSE cadastro_endereco.numero END,
', ',
cadastro_bairro.nome
) AS paciente_rua_numero_bairro
"),
'cadastro_municipio.nome AS paciente_municipio_residencia',
'cadastro_municipio.ibge AS paciente_codigo_ibge_municipio',
'cadastro_estado.uf AS paciente_uf',
'cadastro_logradouro.cep AS paciente_cep',
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.id AS solicitacao_proc_cirurgico_item_id',
'parametrizacao_procedimento_cirurgico.procedimento_codigo AS procedimento_cirurgico_codigo',
'parametrizacao_procedimento_cirurgico.nome AS procedimento_cirurgico_nome',
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.justificativa AS justificativa_procedimento_solicitado_descricao_diagnostico',
'cid.codigo AS justificativa_procedimento_solicitado_cid_codigo',
'cid.nome AS justificativa_procedimento_solicitado_cid_nome',
'geral_ciap.codigo AS observacao_procedimento_solicitado_ciap_codigo',
'geral_ciap.descricao AS observacao_procedimento_solicitado_ciap_descricao',
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.observacao AS justificativa_procedimento_solicitado_observacoes',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
DB::raw("DATE_FORMAT(ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_at, '%d/%m/%Y') AS solicitacao_data_solicitacao"),
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN 'cns' ELSE 'cpf' END AS solicitacao_documento"),
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN cadastro_cidadao_usuario.cns ELSE cadastro_cidadao_usuario.cpf END AS solicitacao_numero_documento"),
'ambulatorio_classificacao_risco.descricao_encaminhamento AS classificacao_risco_descricao_encaminhamento'
])
->join('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id')
->join('ambulatorio_atendimento_soap', 'ambulatorio_atendimento_soap.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.soap_id')
->join('ambulatorio_atendimento', 'ambulatorio_atendimento.id', 'ambulatorio_atendimento_soap.atendimento_id')
->join('parametrizacao_procedimento_cirurgico', 'parametrizacao_procedimento_cirurgico.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.procedimento_cirurgico_id')
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_centro_custo_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
->leftJoin('ambulatorio_agendamento', 'ambulatorio_agendamento.id', 'ambulatorio_atendimento.agendamento_id')
->leftJoin('ambulatorio_demanda_espontanea', 'ambulatorio_demanda_espontanea.id', 'ambulatorio_atendimento.demanda_espontanea_id')
->leftJoin('cadastro_paciente', 'cadastro_paciente.id', DB::raw("COALESCE(ambulatorio_agendamento.paciente_id, ambulatorio_demanda_espontanea.paciente_id)"))
->leftJoin('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('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
->leftJoin('sigtap.cid', 'cid.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.cid_id')
->leftJoin('geral_ciap', 'geral_ciap.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.ciap_id')
->leftJoin('cadastro_lotacao', 'cadastro_lotacao.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_lotacao_id')
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
->leftJoin('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
->leftJoin('ambulatorio_classificacao_risco', 'ambulatorio_classificacao_risco.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.classificacao_risco_id')
->where('ambulatorio_atendimento_soap.is_rascunho', false)
->when(isset($dados['itens']), fn ($q) => $q->whereIn('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.id', collect($dados['itens'])->where('origem', 'procedimento_cirurgico')->pluck('id')))
->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento')
->where('complexidade', Complexidade::ALTA_COMPLEXIDADE)
->whereColumn('procedimento.codigo', 'parametrizacao_procedimento_cirurgico.procedimento_codigo')
->orderByDesc('competencia_id')
->limit(1);
})
->where('ambulatorio_atendimento.id', $atendimentoId)
->get()
->each(function($query) use (&$solicitacoesProcedimentosCirurgicos, $isEspecifico) {
$solicitacoesProcedimentosCirurgicos[$query->solicitacao_proc_cirurgico_id] = [
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
'estabelecimento_saude_solicitante' => [
'nome' => $query->estabelecimento_saude_solicitante_nome,
'cnes' => Str::padRight($query->estabelecimento_saude_solicitante_cnes, 7),
],
'paciente' => [
'nome' => $query->paciente_nome,
'nome_social' => $query->paciente_nome_social,
'sexo' => $query->paciente_sexo,
'prontuario' => $query->paciente_prontuario,
'cns' => Str::padRight($query->paciente_cns, 15),
'data_nascimento' => $query->paciente_data_nascimento,
'raca_cor' => $query->paciente_raca_cor,
'nome_mae' => $query->paciente_nome_mae,
'telefone' => Str::padRight($query->paciente_telefone, 10),
'rua_numero_bairro' => $query->paciente_rua_numero_bairro,
'municipio_residencia' => $query->paciente_municipio_residencia,
'codigo_ibge_municipio' => $query->paciente_codigo_ibge_municipio,
'uf' => Str::padRight($query->paciente_uf, 2),
'cep' => Str::padRight($query->paciente_cep, 8),
],
'itens' => [],
'justificativa_procedimento_solicitado' => [
'descricao_diagnostico' => Str::substr(
($isEspecifico && $query->classificacao_risco_descricao_encaminhamento
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
) . $query->justificativa_procedimento_solicitado_descricao_diagnostico,
0,
280
),
'cid_codigo' => $query->justificativa_procedimento_solicitado_cid_codigo,
'cid_nome' => $query->justificativa_procedimento_solicitado_cid_nome,
'ciap_codigo' => $query->observacao_procedimento_solicitado_ciap_codigo,
'ciap_descricao' => $query->observacao_procedimento_solicitado_ciap_descricao,
'observacoes' => (!$isEspecifico && $query->classificacao_risco_descricao_encaminhamento
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
) . $query->justificativa_procedimento_solicitado_observacoes,
],
'solicitacao' => [
'nome_profissional_solicitante' => $query->solicitacao_nome_profissional_solicitante,
'data_solicitacao' => $query->solicitacao_data_solicitacao,
'documento' => $query->solicitacao_documento,
'numero_documento' => Str::padRight($query->solicitacao_numero_documento, 15),
],
];
})
->each(function($query) use (&$solicitacoesProcedimentosCirurgicos) {
$solicitacoesProcedimentosCirurgicos[$query->solicitacao_proc_cirurgico_id]['itens'][] = [
'codigo' => Str::padRight($query->procedimento_cirurgico_codigo, 10),
'nome' => $query->procedimento_cirurgico_nome,
'quantidade' => 1,
];
});
}
if ($isEspecifico) {
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-especifico';
} else {
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-padrao';
}
$solicitacoes = collect($solicitacoesExames)->concat(collect($solicitacoesProcedimentosCirurgicos))->all();
return SnappyPdf::loadView($impressao, compact('solicitacoes'))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->setOption('margin-left', '10')
->setOption('margin-right', '10')
->inline();
}
private function getRegulacaoData()
{
$regulacaoData = [
'soap_id' => null,
'exames_ids' => null,
];
if (request()->regulacao_solicitacao_id) {
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
}
return $regulacaoData;
}
private function imprimeNaoSalvo()
{
$parametrizacao = ParametrizacaoAtendimento::first();
$isEspecifico = !is_null($parametrizacao) && $parametrizacao->modelo_impressao_apac === 'especifico';
$paciente = Paciente::find(request()->dados['paciente_id']);
$centroCustoLogado = self::getCurrentCentroCusto();
$usuarioLogado = self::getCurrentLotacao()->usuario;
$ruaNumeroBairro = isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao . ' ' . $paciente->cidadao->domicilio->endereco->logradouro->nome . ', ' . $paciente->cidadao->domicilio->endereco->numero . ' - ' . $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome : '-';
$classificacaoRisco = ClassificacaoRisco::findOrFail(request()->dados['classificacao_risco_id'])->descricao_encaminhamento ?? null;
$solicitacoes[request()->dados['exame_id'] ?? request()->dados['procedimento_cirurgico_id']] = [
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
'estabelecimento_saude_solicitante' => [
'nome' => $centroCustoLogado->infraestrutura->unidade->nome_fantasia,
'cnes' => Str::padRight($centroCustoLogado->infraestrutura->unidade->cnes, 7),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'sexo' => $paciente->cidadao->sexo->descricao === Sexo::MASCULINO ? 'M' : 'F',
'prontuario' => $paciente->prontuario,
'cns' => Str::padRight($paciente->cidadao->cns, 15),
'data_nascimento' => isset($paciente->cidadao->data_nascimento) ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '',
'raca_cor' => $paciente->cidadao->racaCor->descricao,
'nome_mae' => $paciente->cidadao->nome_mae,
'telefone' => $paciente->cidadao->telefones->isNotEmpty() ? (strlen($paciente->cidadao->telefones[0]->numero) === 10 ? Str::padRight($paciente->cidadao->telefones[0]->numero, 10) : Str::padRight($paciente->cidadao->telefones[0]->numero, 11)) : ' ',
'rua_numero_bairro' => $ruaNumeroBairro,
'municipio_residencia' => isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome : '',
'codigo_ibge_municipio' => isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge : '',
'uf' => isset($paciente->cidadao->domicilio->endereco) ? Str::padRight($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf, 2) : ' ',
'cep' => isset($paciente->cidadao->domicilio->endereco) ? Str::padRight($paciente->cidadao->domicilio->endereco->logradouro->cep, 8) : ' ',
],
'justificativa_procedimento_solicitado' => [
'descricao_diagnostico' => Str::substr(($isEspecifico && $classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->dados['justificativa_procedimento_solicitado_descricao_diagnostico'], 0, 280),
'cid_codigo' => request()->dados['justificativa_procedimento_solicitado_cid_codigo'],
'cid_nome' => request()->dados['justificativa_procedimento_solicitado_cid_nome'],
'ciap_codigo' => request()->dados['observacao_procedimento_solicitado_ciap_codigo'],
'ciap_descricao' => request()->dados['observacao_procedimento_solicitado_ciap_descricao'],
'observacoes' => (!$isEspecifico && $classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->dados['justificativa_procedimento_solicitado_observacoes'],
],
'solicitacao' => [
'nome_profissional_solicitante' => $usuarioLogado->cidadao->nome,
'data_solicitacao' => Carbon::now()->format('d/m/Y'),
'documento' => $usuarioLogado->cidadao->cpf ? 'cpf' : 'cns',
'numero_documento' => Str::padRight($usuarioLogado->cidadao->cpf ?? $usuarioLogado->cidadao->cns, 15),
],
'itens' => [
[
'codigo' => Str::padRight(request()->dados['exame_codigo'] ?? request()->dados['procedimento_cirurgico_codigo'], 10),
'nome' => request()->dados['exame_nome'] ?? request()->dados['procedimento_cirurgico_nome'],
'quantidade' => 1,
]
]
];
if ($isEspecifico) {
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-especifico';
} else {
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-padrao';
}
AtendimentoService::saveLogImpressao(
request()->dados['atendimento_id'],
AtendimentoImpressaoTipo::LAUDO_PARA_SOLICITACAO_AUTORIZACAO_DE_PROCEDIMENTO_AMBULATORIAL
);
return SnappyPdf::loadView($impressao, compact('solicitacoes'))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->setOption('margin-left', '10')
->setOption('margin-right', '10')
->inline();
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AgendamentoStatus;
use App\Models\Ambulatorio\AgendamentoTipo;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\AgendamentoService;
use App\Utils\Exports\Pdf1;
class ListaAgendamentoController extends Controller
{
private const TITLE = 'LISTA DE AGENDAMENTOS';
private const TEMPLATE = 'ambulatorio.lista-agendamento';
public function __invoke()
{
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$agendamentoTipo = AgendamentoTipo::find(request()->tipo_id);
$agendamentoStatus = AgendamentoStatus::find(request()->status_id);
$itens = AgendamentoService::index((object) request()->all());
$data = [
'data_inicio' => request()->periodo['start'],
'data_fim' => request()->periodo['end'],
'hora_inicio' => request()->periodo['start'],
'hora_fim' => request()->periodo['start'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao->nome ?? 'Todos',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'agendamento_tipo' => $agendamentoTipo->nome ?? 'Todos',
'agendamento_status' => $agendamentoStatus->nome ?? 'Todos',
'itens' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AgendamentoStatus;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Ambulatorio\ListagemConsultaAgendadaRealizadaService;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class ListagemConsultaAgendadaRealizadaController extends Controller
{
private const TITLE = 'LISTAGEM DE CONSULTAS AGENDADAS/REALIZADAS';
private const TEMPLATE = 'ambulatorio.listagem-consulta-agendada-realizada';
public function __invoke()
{
$itens = ListagemConsultaAgendadaRealizadaService::index();
$itens->each(function ($item) {
if (!is_null($item->paciente_data_nascimento)) {
$item->paciente_data_nascimento = (new Carbon($item->paciente_data_nascimento))->format('d/m/Y');
}
if (!is_null($item->agendado_para_data)) {
$item->agendado_para_data = (new Carbon($item->agendado_para_data))->format('d/m/Y');
}
if (!is_null($item->agendado_na_data)) {
$item->agendado_na_data = (new Carbon($item->agendado_na_data))->format('d/m/Y');
}
});
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$status = AgendamentoStatus::find(request()->status_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'inicio' => substr(request()->inicio, 0, 5),
'fim' => substr(request()->fim, 0, 5),
'origem' => is_null(request()->origem)
? 'Todas' : (request()->origem === 'agendamento' ? 'CONSULTA AGENDADA' : 'DEMANDA ESPONTÂNEA'),
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'status' => $status->nome ?? 'Todos',
'colunas' => collect(request()->selected_cols),
'itens' => $itens,
];
$orientation = isset(request()->orientation) ? request()->orientation : 'portrait';
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, $orientation);
}
}

View File

@@ -0,0 +1,107 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class OrientacaoController extends Controller
{
private const TITLE = 'ORIENTAÇÃO';
private const TEMPLATE = 'ambulatorio.orientacao';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$orientacoes = $this->getOrientacoesNaoSalvas($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ORIENTACAO);
} else {
$orientacoes = $this->getOrientacoes($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('orientacoes'));
}
private function getOrientacoesNaoSalvas($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$orientacoes = [
[
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '-',
'idade' => $paciente->cidadao->idade['anos'] ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae ?? '-',
'prontuario' => $paciente->prontuario ?? '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : '-',
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : '-',
'telefone_numero' => $paciente->cidadao->telefone_principal ? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero) : '-',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? '-',
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? '-',
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? '-',
],
'descricao' => request()->descricao,
]
];
$data = [
'orientacoes' => $orientacoes,
];
return $data;
}
private function getOrientacoes($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$orientacoes = [];
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$orientacoes, $paciente) {
$soap->orientacoes()->get()->each(function($orientacao) use (&$orientacoes, $paciente) {
$orientacoes[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? '-',
'data_nascimento' => $paciente->cidadao->data_nascimento ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '-',
'idade' => $paciente->cidadao->idade['anos'] ?? '-',
'nome_mae' => $paciente->cidadao->nome_mae ?? '-',
'prontuario' => $paciente->prontuario ?? '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : '-',
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : '-',
'telefone_numero' => $paciente->cidadao->telefone_principal ? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero) : '-',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? '-',
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? '-',
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? '-',
],
'descricao' => $orientacao->descricao,
];
});
});
$data = [
'orientacoes' => $orientacoes,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Services\Ambulatorio\AtendimentoEnfermagem\PosConsultaService;
use App\Utils\Exports\Pdf1;
class PosConsultaController extends Controller
{
private const TITLE = 'PÓS-CONSULTA';
private const TEMPLATE = 'ambulatorio.pos-consulta';
public function __invoke($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$posConsultas = $atendimento->posConsultas->map(fn ($pc) => PosConsultaService::getPrintData($pc->id));
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('posConsultas'));
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Services\Ambulatorio\AtendimentoEnfermagem\PreAtendimentoService;
use App\Utils\Exports\Pdf1;
class PreAtendimentoController extends Controller
{
private const TITLE = 'PRÉ-ATENDIMENTO';
private const TEMPLATE = 'ambulatorio.pre-atendimento';
public function __invoke($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$data = PreAtendimentoService::getPrintData($atendimento->preAtendimento->id);
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,230 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class ReceitaMedicaComumController extends Controller
{
private const TITLE = 'RECEITUÁRIO';
private const TEMPLATE = 'ambulatorio.receita-medica-comum';
public static function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_COMUM);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function getReceitasNaoSalvas($pacienteId) {
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
$medicamentos = request()->medicamentos;
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
$query
->whereHas('soap', function ($query) {
$query->where('atendimento_id', request()->atendimento_id);
});
})
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
->first();
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
$createdAt = $item->created_at;
} else {
$currentLotacao = self::getCurrentLotacao();
}
$paciente = Paciente::where('id', $pacienteId)->first();
$medicamentos = [];
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$medicamentos[] = [
'nome' => $solicitacao['material']['descricao'],
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ?$solicitacao['posologia'] : null),
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id']) ? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'descricao' => $solicitacao['descricao'] ?? ''
];
}
} else {
$medicamentos[] = [
'nome' => request()->material['descricao'],
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id) ? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => request()->recomendacoes ?? '',
'descricao' => request()->descricao ?? ''
];
}
return [
'profissional' => [
'nome' => $currentLotacao->usuario->cidadao->nome,
'cbo' => $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cns' => $paciente->cidadao->cns,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
: Carbon::now()->translatedFormat('d \de F \de Y'),
],
'medicamentos' => $medicamentos,
];
}
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
->push([
'profissional' => [
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cns' => $paciente->cidadao->cns,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
],
'medicamentos' => $prescricaoMedicamento->itens
->where('material.receita_tipo_id', TipoReceita::COMUM)
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
->map(fn ($item) => [
'nome' => $item->material->descricao,
'usoContinuo' => $item->is_uso_continuo,
'imprimirSeparado' => $item->is_imprimir_separado,
'removerImpressao' => $item->is_remover_impressao,
'doseUnica' => $item->is_dose_unica,
'livre' => !is_null($item->descricao),
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? ''
]),
])
));
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,328 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
class ReceitaMedicaEspecialAmarelaController extends Controller
{
private const TITLE = 'RECEITUÁRIO ESPECIAL (AMARELA)';
private const TEMPLATE = 'ambulatorio.receita-medica-especial-amarela';
public function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$receitas = self::getReceitasNaoSalvas($atendimentoId);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL_AMARELA);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
public static function getAtendimento($atendimentoId, &$receitas, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$receitas, $paciente, $dados) {
$soap->prescricoesMedicamentos->each(function ($prescricaoMedicamentos) use (&$receitas, $paciente, $dados) {
$prescricaoMedicamentos->itens
->where('material.receita_tipo_id', TipoReceita::ESPECIAL_AMARELA)
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
->each(function($item) use (&$receitas, $paciente, $prescricaoMedicamentos) {
$lotacao = $item->createdLotacao;
$receitas[] = [
'removerImpressao' => $item->is_remover_impressao,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? null,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => $item->material->descricao,
'quantidade' => $item->material->quantidade,
'dose' => $item->dose ?? '-',
'via_administracao' => $item->material->viaAdministracao->nome ?? '-',
'forma_farmaceutica' => $item->material->formaFarmaceutica->nome ?? '-',
'apresentacao' => $item->material->apresentacao->nome ?? '-',
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
],
'recomendacoes' => $item->recomendacoes ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
});
});
});
}
public static function getReceitasNaoSalvas($pacienteId) {
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
$medicamentos = request()->medicamentos;
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
$query
->whereHas('soap', function ($query) {
$query->where('atendimento_id', request()->atendimento_id);
});
})
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
->first();
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
} else {
$currentLotacao = self::getCurrentLotacao();
}
$paciente = Paciente::where('id', $pacienteId)->first();
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$receitas[] = [
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => $solicitacao['material']['descricao'],
'quantidade' => $solicitacao['material']['quantidade'],
'apresentacao' => $solicitacao['material']['apresentacao'] ??null,
'dose' => $solicitacao['dose'] ?? '-',
'via_administracao' => $solicitacao['material']['via_administracao'] ?? '-',
'forma_farmaceutica' => $solicitacao['unidade_medida'] ?? '-',
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset( $solicitacao['posologia']) && $solicitacao['posologia'] ? $solicitacao['posologia'] : null),
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
],
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
}
return $receitas;
} else {
$receitas[] = [
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => request()->material['descricao'],
'quantidade' => request()->material['quantidade'],
'dose' => request()->dose ?? '-',
'via_administracao' => request()->material['via_administracao'] ?? '-',
'forma_farmaceutica' => request()->unidade_medida ?? '-',
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) && request()->posologia ? request()->posologia : null),
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'apresentacao' => request()->material['apresentacao'] ?? '-',
],
'recomendacoes' => request()->recomendacoes ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
return $receitas;
}
}
}

View File

@@ -0,0 +1,318 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class ReceitaMedicaEspecialAzulController extends Controller
{
private const TITLE = 'RECEITUÁRIO ESPECIAL (AZUL)';
private const TEMPLATE = 'ambulatorio.receita-medica-especial-azul';
public function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$receitas = self::getReceitasNaoSalvas($atendimentoId);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL_AZUL);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function getReceitasNaoSalvas($pacienteId) {
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
$medicamentos = request()->medicamentos;
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
$query
->whereHas('soap', function ($query) {
$query->where('atendimento_id', request()->atendimento_id);
});
})
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
->first();
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
} else {
$currentLotacao = self::getCurrentLotacao();
}
$paciente = Paciente::where('id', $pacienteId)->first();
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$receitas[] = [
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => $solicitacao['material']['descricao'],
'quantidade' => $solicitacao['material']['quantidade'],
'dose' => $solicitacao['dose'] ?? '-',
'via_administracao' => $solicitacao['material']['via_administracao'] ?? '-',
'forma_farmaceutica' => $solicitacao['unidade_medida'] ?? '-',
'posologia' => isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null,
],
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
}
return $receitas;
} else {
$receitas[] = [
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => request()->material['descricao'],
'quantidade' => request()->material['quantidade'],
'dose' => request()->dose ?? '-',
'via_administracao' => request()->material['via_administracao'] ?? '-',
'forma_farmaceutica' => request()->unidade_medida ?? '-',
'posologia' => isset(request()->posologia) ? request()->posologia : null,
],
'recomendacoes' => request()->recomendacoes ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
return $receitas;
}
}
public static function getAtendimento($atendimentoId, &$receitas, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function($soap) use (&$receitas, $paciente, $dados) {
$soap->prescricoesMedicamentos->each(function ($prescricaoMedicamentos) use (&$receitas, $paciente, $dados) {
$prescricaoMedicamentos->itens
->where('material.receita_tipo_id', TipoReceita::ESPECIAL_AZUL)
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
->each(function($item) use (&$receitas, $paciente, $prescricaoMedicamentos) {
$lotacao = $item->createdLotacao;
$receitas[] = [
'removerImpressao' => $item->is_remover_impressao,
'infraestrutura' => [
'unidade' => [
'nome_fantasia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->nome_fantasia ?? null,
'cnes' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnes ?? null,
'cnpj' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj)
: null,
],
'endereco' => [
'logradouro' => [
'municipio' => [
'estado' => [
'uf' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->nome ?? null,
'cep' => MaskUtil::getCepMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
],
'numero' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->numero ?? null,
'referencia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->referencia ?? null,
],
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->telefone) ?? null,
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'material' => [
'descricao' => $item->material->descricao,
'quantidade' => $item->material->quantidade,
'dose' => $item->dose ?? '-',
'via_administracao' => $item->material->viaAdministracao->nome ?? '-',
'forma_farmaceutica' => $item->material->formaFarmaceutica->nome ?? '-',
'posologia' => $item->posologia,
],
'recomendacoes' => $item->recomendacoes ?? '',
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
});
});
});
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,258 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class ReceitaMedicaEspecialController extends Controller
{
private const TITLE = 'RECEITUÁRIO ESPECIAL';
private const TEMPLATE = 'ambulatorio.receita-medica-especial';
public static function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function getReceitasNaoSalvas($pacienteId) {
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
$medicamentos = request()->medicamentos;
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
$query
->whereHas('soap', function ($query) {
$query->where('atendimento_id', request()->atendimento_id);
});
})
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
->first();
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
$createdAt = $item->created_at;
} else {
$currentLotacao = self::getCurrentLotacao();
}
$paciente = Paciente::where('id', $pacienteId)->first();
$medicamentos = [];
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$medicamentos[] = [
'id' => uniqid(),
'nome' => $solicitacao['material']['descricao'],
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null),
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
];
}
} else {
$medicamentos[] = [
'id' => uniqid(),
'nome' => request()->material['descricao'],
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => request()->recomendacoes ?? '',
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
];
}
$medicamentos = collect($medicamentos)->filter(fn ($m) => !$m['removerImpressao'])->sortBy('usoContinuo')->values();
return [
'isEspecial' => true,
'profissional' => [
'nome' => $currentLotacao->usuario->cidadao->nome,
'cbo' => $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $currentLotacao->infraestrutura->endereco->completo
. (isset($currentLotacao->infraestrutura->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep))
: ''),
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cns' => $paciente->cidadao->cns,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
: Carbon::now()->translatedFormat('d \de F \de Y'),
],
'medicamentos' => $medicamentos,
];
}
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
->push([
'isEspecial' => true,
'profissional' => [
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo
. (isset($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep))
: ''),
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
],
'medicamentos' => $prescricaoMedicamento->itens
->whereIn('material.receita_tipo_id', [
TipoReceita::ESPECIAL
])
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
->map(fn ($item) => [
'id' => $item->id,
'nome' => $item->material->descricao,
'usoContinuo' => $item->is_uso_continuo,
'imprimirSeparado' => $item->is_imprimir_separado,
'removerImpressao' => $item->is_remover_impressao,
'doseUnica' => $item->is_dose_unica,
'livre' => !is_null($item->descricao),
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? ''
])
->filter(fn ($m) => !$m['removerImpressao'])
->sortBy('usoContinuo')
->values()
])
));
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,319 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use DOMDocument;
class ReceitaMedicaNaoPadronizadaComumController extends Controller
{
private const TITLE = 'RECEITUÁRIO';
private const TEMPLATE = 'ambulatorio.receita-medica-nao-padronizada-comum';
public static function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
self::setReceitasNaoSalvas($atendimentoId, $receitas);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_NAO_PADRONIZADA_COMUM);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas->filter(fn ($r) => count($r['medicamentos']) > 0)->values()->all()
];
}
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'paraAssinar' => $paraAssinaturaEletronica,
'receitas' => $receitas
];
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function setReceitasNaoSalvas($pacienteId, $receitas)
{
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$medicamentos = [];
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$medicamentos[] = [
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'descricao' => $solicitacao['descricao'] ?? '',
];
}
} else {
$medicamentos[] = [
'is_imprimir_separado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado === 'true' ? true : false,
'recomendacoes' => request()->recomendacoes ?? '',
'descricao' => request()->descricao ?? '',
];
}
foreach ($medicamentos as &$medicamento) {
$htmlOriginal = $medicamento['descricao'] ?? '';
$htmlOriginal = preg_replace('/<p>\s*<br\s*\/?>\s*<\/p>/i', '', $htmlOriginal);
$descricaoPaginas = [];
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML('<?xml encoding="UTF-8"><div>' . $htmlOriginal . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
$wrapper = $dom->getElementsByTagName('div')->item(0);
$currentPage = '';
$currentLineCount = 0;
$maxLineLength = 100;
$maxLinesPerPage = 15;
foreach (iterator_to_array($wrapper->childNodes) as $node) {
$tempDom = new DOMDocument();
$imported = $tempDom->importNode($node, true);
$tempDom->appendChild($imported);
$htmlNode = $tempDom->saveHTML();
$textoVisivel = trim(preg_replace('/\s+/', ' ', strip_tags($htmlNode)));
$linhasEstimadas = (int) ceil(mb_strlen($textoVisivel) / $maxLineLength);
$linhasEstimadas += substr_count(strtolower($htmlNode), '<br');
if (stripos($htmlNode, '<p') !== false && mb_strlen($textoVisivel) === 0) {
$linhasEstimadas += 1;
}
if ($currentLineCount + $linhasEstimadas > $maxLinesPerPage && $currentLineCount > 0) {
$descricaoPaginas[] = $currentPage;
$currentPage = '';
$currentLineCount = 0;
}
$currentPage .= $htmlNode;
$currentLineCount += $linhasEstimadas;
}
if (!empty(trim($currentPage))) {
$descricaoPaginas[] = $currentPage;
}
$medicamento['descricao_paginas'] = $descricaoPaginas;
}
$dadosPrincipais = [
'isEspecial' => true,
'profissional' => [
'nome' => $currentLotacao->usuario->cidadao->nome,
'cbo' => $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cns' => $paciente->cidadao->cns,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
],
];
$medicamentosAgrupados = collect($medicamentos)->where('is_imprimir_separado', false);
if ($medicamentosAgrupados->isNotEmpty()) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => $medicamentosAgrupados->all()
]));
}
$medicamentosSeparados = collect($medicamentos)->where('is_imprimir_separado', true);
if ($medicamentosSeparados->isNotEmpty()) {
$medicamentosSeparados->each(function ($medicamento) use ($receitas, $dadosPrincipais) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => [$medicamento]
]));
});
}
}
public static function getAtendimento($atendimentoId, $receitas, $dados = [])
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos
->each(function ($prescricaoMedicamento) use ($receitas, $paciente, $dados) {
$dadosPrincipais = [
'isEspecial' => true,
'profissional' => [
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
],
];
$itens = $prescricaoMedicamento->itens
->whereNull('material_id')
->where('receita_tipo_id', TipoReceita::COMUM)
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)));
$processarItens = function ($itens) {
return $itens->map(function ($item) {
$htmlOriginal = $item->descricao ?? '';
$htmlOriginal = preg_replace('/<p>\s*<br\s*\/?>\s*<\/p>/i', '', $htmlOriginal);
$descricaoPaginas = [];
$dom = new \DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML('<?xml encoding="UTF-8"><div>' . $htmlOriginal . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
$wrapper = $dom->getElementsByTagName('div')->item(0);
$currentPage = '';
$currentLineCount = 0;
$maxLineLength = 100;
$maxLinesPerPage = 15;
foreach (iterator_to_array($wrapper->childNodes) as $node) {
$tempDom = new \DOMDocument();
$imported = $tempDom->importNode($node, true);
$tempDom->appendChild($imported);
$htmlNode = $tempDom->saveHTML();
$textoVisivel = trim(preg_replace('/\s+/', ' ', strip_tags($htmlNode)));
$linhasEstimadas = (int) ceil(mb_strlen($textoVisivel) / $maxLineLength);
$linhasEstimadas += substr_count(strtolower($htmlNode), '<br');
if (stripos($htmlNode, '<p') !== false && mb_strlen($textoVisivel) === 0) {
$linhasEstimadas += 1;
}
if ($currentLineCount + $linhasEstimadas > $maxLinesPerPage && $currentLineCount > 0) {
$descricaoPaginas[] = $currentPage;
$currentPage = '';
$currentLineCount = 0;
}
$currentPage .= $htmlNode;
$currentLineCount += $linhasEstimadas;
}
if (!empty(trim($currentPage))) {
$descricaoPaginas[] = $currentPage;
}
return [
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? '',
'descricao_paginas' => $descricaoPaginas,
];
});
};
$itensAgrupados = $itens->where('is_imprimir_separado', false);
if ($itensAgrupados->isNotEmpty()) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => $processarItens($itensAgrupados)->all()
]));
}
$itensSeparados = $itens->where('is_imprimir_separado', true);
if ($itensSeparados->isNotEmpty()) {
$processarItens($itensSeparados)->each(function ($medicamentoSeparado) use ($receitas, $dadosPrincipais) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => [$medicamentoSeparado]
]));
});
}
})
);
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,238 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\Medicamento\TipoReceita;
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class ReceitaMedicaNaoPadronizadaEspecialController extends Controller
{
private const TITLE = 'RECEITUÁRIO ESPECIAL';
private const TEMPLATE = 'ambulatorio.receita-medica-nao-padronizada-especial';
public static function getTemplate($atendimentoId, $dados = [])
{
$receitas = collect();
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
self::setReceitasNaoSalvas($atendimentoId, $receitas);
$data = [
'exibirAssinatura' => true,
'receitas' => $receitas
];
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_NAO_PADRONIZADA_ESPECIAL);
} else {
self::getAtendimento($atendimentoId, $receitas, $dados);
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$data = [
'exibirAssinatura' => !$paraAssinaturaEletronica,
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
];
}
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
}
public static function setReceitasNaoSalvas($pacienteId, $receitas)
{
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$medicamentos = [];
if (request()->has('multiple') && request()->multiple == true) {
foreach (request()->medicamentos as $solicitacao) {
$medicamentos[] = [
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
'descricao' => $solicitacao['descricao'] ?? '',
];
}
} else {
$medicamentos[] = [
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
'recomendacoes' => request()->recomendacoes ?? '',
'descricao' => request()->descricao ?? ''
];
}
$dadosPrincipais = [
'isEspecial' => true,
'profissional' => [
'nome' => $currentLotacao->usuario->cidadao->nome,
'cbo' => $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $currentLotacao->infraestrutura->endereco->completo
. (isset($currentLotacao->infraestrutura->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep))
: ''),
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cns' => $paciente->cidadao->cns,
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
],
];
$medicamentosAgrupados = collect($medicamentos)->where('is_imprimir_separado', false);
if ($medicamentosAgrupados->isNotEmpty()) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => $medicamentosAgrupados->all()
]));
}
$medicamentosSeparados = collect($medicamentos)->where('is_imprimir_separado', true);
if ($medicamentosSeparados->isNotEmpty()) {
$medicamentosSeparados->each(function ($medicamento) use ($receitas, $dadosPrincipais) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => [$medicamento]
]));
});
}
}
public static function getAtendimento($atendimentoId, $receitas, $dados = [])
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos
->each(function ($prescricaoMedicamento) use ($receitas, $paciente, $dados) {
$dadosPrincipais = [
'isEspecial' => true,
'profissional' => [
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'unidade' => [
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
: null,
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo
. (isset($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep))
: ''),
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nomeSocial' => $paciente->cidadao->nome_social,
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
? $paciente->cidadao->domicilio->endereco->completo
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
: '')
: '-',
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
'prontuario' => $paciente->prontuario,
],
'dataCadastro' => [
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
],
];
$itens = $prescricaoMedicamento->itens
->whereNull('material_id')
->where('receita_tipo_id', TipoReceita::ESPECIAL)
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)));
$itensAgrupados = $itens->where('is_imprimir_separado', false);
if ($itensAgrupados->isNotEmpty()) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => $itensAgrupados->map(fn ($item) => [
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? ''
])
]));
}
$itensSeparados = $itens->where('is_imprimir_separado', true);
if ($itensSeparados->isNotEmpty()) {
$itensSeparados->each(function ($item) use ($receitas, $dadosPrincipais) {
$receitas->push(array_merge($dadosPrincipais, [
'medicamentos' => collect([
[
'recomendacoes' => $item->recomendacoes ?? '',
'descricao' => $item->descricao ?? ''
]
])
]));
});
}
})
);
}
public function __invoke($atendimentoId, $output = null, $dados = [])
{
$pdf = new Pdf();
$pdf->setPaper('A4', 'landscape');
return $output
? $pdf->output(self::getTemplate($atendimentoId, $dados))
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AgendamentoStatus;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Ambulatorio\RelatorioConsultaFinalizadaService;
use App\Utils\Exports\Pdf1;
class RelatorioConsultaFinalizadaController extends Controller
{
private const TITLE = 'RELATÓRIO DE CONSULTAS FINALIZADAS';
private const TEMPLATE = 'ambulatorio.relatorio-consulta-finalizada';
public function __invoke()
{
$itens = RelatorioConsultaFinalizadaService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$status = AgendamentoStatus::find(request()->status_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'status' => $status->nome ?? 'Todos',
'itens' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Ambulatorio\RelatorioConsultaSolicitadaService;
use App\Utils\Exports\Pdf1;
class RelatorioConsultaSolicitadaController extends Controller
{
private const TITLE = 'RELATÓRIO DE CONSULTAS SOLICITADAS';
private const TEMPLATE = 'ambulatorio.relatorio-consulta-solicitada';
public function __invoke()
{
$itens = RelatorioConsultaSolicitadaService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AgendamentoTipo as AmbulatorioAgendamentoTipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AgendamentoStatus;
use App\Models\Ambulatorio\AgendamentoTipo;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Intranet\Municipio;
use App\Services\Ambulatorio\RelatorioEstatisticoConsultaService;
use App\Utils\Exports\Pdf1;
class RelatorioEstatisticoConsultaController extends Controller
{
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE CONSULTA';
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-consulta';
public function __invoke()
{
$itens = RelatorioEstatisticoConsultaService::index();
$demandaTipo = request()->demanda_tipo === 'agendada' ? 'AGENDADA' : (request()->demanda_tipo === 'espontanea' ? 'ESPONTÂNEA' : 'Todas');
$agendamentoTipo = AgendamentoTipo::find(request()->agendamento_tipo_id) ?? AgendamentoTipo::find(AmbulatorioAgendamentoTipo::CONSULTA);
$municipio = Municipio::find(request()->municipio_id) ?? 'Todos';
$unidade = Unidade::find(request()->unidade_id) ?? 'Todas';
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id) ?? 'Todos';
$especialidade = Especialidade::find(request()->especialidade_id) ?? 'Todas';
$usuario = Usuario::find(request()->usuario_id) ?? 'Todos';
$status = request()->demanda_tipo === 'agendada' ? AgendamentoStatus::find(request()->agendamento_status_id) : 'Todos';
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'demanda_tipo' => $demandaTipo,
'agendamento_tipo' => $agendamentoTipo->nome ?? 'Todos',
'municipio' => $municipio->nome ?? 'Todos',
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'data' => $itens,
'status' => $status,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\AgendamentoStatus;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Ambulatorio\RelatorioEstatisticoPacienteService;
use App\Utils\Exports\Pdf1;
class RelatorioEstatisticoPacienteController extends Controller
{
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE PACIENTES';
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-paciente';
public function __invoke()
{
$itens = RelatorioEstatisticoPacienteService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$status = AgendamentoStatus::find(request()->status_id);
$usuario = Usuario::find(request()->usuario_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'status' => $status->nome ?? 'Todos',
'idade_de' => request()->idade_de ?? '-',
'idade_ate' => request()->idade_ate ?? '-',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\Ambulatorio\RelatorioEstatisticoStatusService;
use App\Utils\Exports\Pdf1;
class RelatorioEstatisticoStatusController extends Controller
{
private const TITLE = 'RELATÓRIO ESTATÍSTICO POR STATUS';
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-status';
public function __invoke()
{
$itens = RelatorioEstatisticoStatusService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$origem = request()->origem === 'agendamento'
? 'Agendamento'
: (request()->origem === 'demanda-espontanea' ? 'Demanda espontânea' : null);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'origem' => $origem ?? 'Todas',
'onlyAgendamentos' => request()->origem === 'agendamento',
'onlyDemandasEspontaneas' => request()->origem === 'demanda-espontanea',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioIdentificacaoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioIdentificacaoController extends Controller
{
private const TITLE = 'RELATÓRIO DE IDENTIFICAÇÃO (PROCEDIMENTOS LANÇADOS)';
private const TEMPLATE = 'ambulatorio.relatorio-identificacao';
public function __invoke()
{
$itens = RelatorioIdentificacaoService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$procedimento = Procedimento::find(request()->procedimento_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'procedimento' => $procedimento ? MaskUtil::getProcedimentoMasked($procedimento->codigo) . ' - ' . $procedimento->nome : 'Todos',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\JornadaSituacao;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\RelatorioJornadaService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class RelatorioJornadaController extends Controller
{
private const TITLE = 'RELATÓRIO DE JORNADAS';
private const TEMPLATE = 'ambulatorio.relatorio-jornada';
public static function getTemplate()
{
$resultado = RelatorioJornadaService::index();
$itens = $resultado['jornadas'];
$itens->each(function ($item) {
$item->data = (new Carbon($item->data))->format('d/m/Y');
});
$statusValue = DataUtil::isStringBoolean(request()->status)
? DataUtil::getBooleanValueFromStringBoolean(request()->status)
: null;
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$status = RelatorioJornadaService::getStatus($statusValue);
$situacao = JornadaSituacao::find(request()->situacao_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'status' => $status->text ?? 'Todos',
'situacao' => $statusValue ? 'Nenhuma' : ($situacao->nome ?? 'Todas'),
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\RelatorioPacienteAtendimentoService;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class RelatorioPacienteAtendimentoController extends Controller
{
private const TITLE = 'RELATÓRIO DE PACIENTES PARA ATENDIMENTO';
private const TEMPLATE = 'ambulatorio.relatorio-paciente-atendimento';
public static function getTemplate()
{
$resultado = RelatorioPacienteAtendimentoService::index();
$itens = $resultado['agendamentos'];
$itens->each(function ($item) {
$item->data = (new Carbon($item->data))->format('d/m/Y');
});
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'colunas' => collect(request()->columns),
'itens' => $itens,
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioProcedimentoService;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class RelatorioProcedimentoController extends Controller
{
private const TITLE = 'RELATÓRIO DE PROCEDIMENTOS';
private const TEMPLATE = 'ambulatorio.relatorio-procedimento';
public static function getTemplate()
{
$resultado = RelatorioProcedimentoService::index();
$itens = $resultado['procedimentos'];
if (request()->sort_by) {
$sortDesc = filter_var(request()->sort_desc, FILTER_VALIDATE_BOOLEAN);
$itens = $sortDesc
? $itens->sortByDesc(request()->sort_by)->values()
: $itens->sortBy(request()->sort_by)->values();
}
$itens->each(function ($item) {
$item->data = (new Carbon($item->data))->format('d/m/Y');
if (!is_null($item->paciente_data_nascimento)) {
$item->paciente_data_nascimento = (new Carbon($item->paciente_data_nascimento))->format('d/m/Y');
}
$item->ocupacao_cbo = collect([$item->ocupacao_codigo, $item->ocupacao_nome])
->filter()
->implode(' - ');
});
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
$totalRegistros = $itens->count();
$totalProcedimentos = $itens->sum(fn ($item) => $item->procedimentos_sigtap->count());
$totalAbpg = $itens->sum(fn ($item) => $item->procedimentos_abpg->count());
$demandaTipoLabels = ['agendada' => 'Agendada', 'espontanea' => 'Espontânea'];
$demandaTipo = $demandaTipoLabels[request()->demanda_tipo] ?? 'Todos';
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'procedimento' => $procedimento ? "{$procedimento->codigo} - {$procedimento->nome}" : 'Todos',
'demandaTipo' => $demandaTipo,
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalRegistros' => $totalRegistros,
'totalProcedimentos' => $totalProcedimentos,
'totalAbpg' => $totalAbpg,
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioProcedimentoLancadoPeriodoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioProcedimentoLancadoPeriodoController extends Controller
{
private const TITLE = 'RELATÓRIO DE PROCEDIMENTOS LANÇADOS POR PERÍODO';
private const TEMPLATE = 'ambulatorio.relatorio-procedimento-lancado-periodo';
public static function getTemplate()
{
$resultado = RelatorioProcedimentoLancadoPeriodoService::index();
$itens = $resultado['procedimentos'];
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'procedimento' => $procedimento
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioProducaoAmbulatorialService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioProducaoAmbulatorialController extends Controller
{
private const TITLE = 'RELATÓRIO DE PRODUÇÃO AMBULATORIAL - BPA';
private const TEMPLATE = 'ambulatorio.relatorio-producao-ambulatorial';
public static function getTemplate()
{
$resultado = RelatorioProducaoAmbulatorialService::index();
$itens = $resultado['procedimentos'];
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'procedimento' => $procedimento
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
'idadeDe' => request()->idade_de,
'idadeAte' => request()->idade_ate,
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,50 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\RelatorioQuantitativoAtendimentoService;
use App\Utils\Exports\Pdf1;
class RelatorioQuantitativoAtendimentoController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO DE ATENDIMENTOS';
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-atendimento';
public static function getTemplate()
{
$resultado = RelatorioQuantitativoAtendimentoService::index();
$itens = $resultado['infraestruturas'];
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
return [
'ano' => request()->periodo['ano'],
'mes' => RelatorioQuantitativoAtendimentoService::getMeses()
->where('value', request()->periodo['mes'])
->first()['text'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'colunas' => collect(request()->columns),
'colunasTotalizadores' => collect(request()->columns)
->reject(fn ($c) => $c['key'] === 'usuario_nome')
->values(),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\RelatorioQuantitativoCidService;
use App\Utils\Exports\Pdf1;
class RelatorioQuantitativoCidController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO POR CID';
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-cid';
public function __invoke()
{
$itens = RelatorioQuantitativoCidService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$cid = Cid::find(request()->cid_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao->nome ?? 'Todos',
'cid' => $cid->nome ?? 'Todos',
'idade_de' => request()->idade_de ?? '-',
'idade_ate' => request()->idade_ate ?? '-',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Services\Ambulatorio\RelatorioQuantitativoConsultaSolicitadaService;
use App\Utils\Exports\Pdf1;
class RelatorioQuantitativoConsultaSolicitadaController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO DE CONSULTAS SOLICITADAS';
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-consulta-solicitada';
public function __invoke()
{
$itens = RelatorioQuantitativoConsultaSolicitadaService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia,
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioQuantitativoProcedimentoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioQuantitativoProcedimentoController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PROCEDIMENTOS';
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-procedimento';
public static function getTemplate()
{
$resultado = RelatorioQuantitativoProcedimentoService::index();
$itens = $resultado['procedimentos'];
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'procedimento' => $procedimento
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\RelatorioQuantitativoProducaoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioQuantitativoProducaoController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PRODUÇÃO';
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-producao';
public static function getTemplate()
{
$resultado = RelatorioQuantitativoProducaoService::index();
$itens = $resultado['procedimentos'];
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$usuario = Usuario::find(request()->usuario_id);
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
return [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'procedimento' => $procedimento
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
'idadeDe' => request()->idade_de,
'idadeAte' => request()->idade_ate,
'colunas' => collect(request()->columns),
'itens' => $itens,
'totalizadores' => $resultado['totalizadores'],
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Http\Controllers\Controller;
use App\Enums\Ambulatorio\FeridaStatus;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Ocupacao;
use App\Services\Ambulatorio\RelatorioRastreioFeridaService;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
class RelatorioRastreioFeridasController extends Controller
{
private const TITLE = 'RELATÓRIO DE RASTREIO DE FERIDAS';
private const TEMPLATE = 'ambulatorio.relatorio-rastreio-feridas';
public static function getTemplate()
{
$itens = RelatorioRastreioFeridaService::index();
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$especialidade = Especialidade::find(request()->especialidade_id);
$usuario = Usuario::find(request()->usuario_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$status = request()->status_id;
if (!is_null($status)) {
switch ($status) {
case FeridaStatus::ATIVO:
$status = (object) ['nome' => 'Ativo'];
break;
case FeridaStatus::CICATRIZADA:
$status = (object) ['nome' => 'Cicatrizada'];
break;
default:
break;
}
}else{
$status = (object) ['nome' => 'Todos'];
}
if (isset($itens['atendimentos']) && is_array($itens['atendimentos'])) {
$itens['atendimentos'] = collect($itens['atendimentos'])->map(function ($atendimento) {
switch ((int) ($atendimento['cicatrizada'] ?? -1)) {
case FeridaStatus::ATIVO:
$atendimento['cicatrizada'] = 'Ativo';
break;
case FeridaStatus::CICATRIZADA:
$atendimento['cicatrizada'] = 'Cicatrizada';
break;
default:
$atendimento['cicatrizada'] = '-';
break;
}
return $atendimento;
})->toArray();
}
return [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'especialidade' => $especialidade->nome ?? 'Todas',
'usuario' => $usuario->nome ?? 'Todos',
'cbo' => $ocupacao->codigo ?? 'Todos',
'status' => $status->nome,
'colunas' => collect(request()->columns),
'itens' => $itens,
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate(), $orientation = 'landscape');
}
}

View File

@@ -0,0 +1,188 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Sigtap\Procedimento;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Utils\DataUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class RequisicaoExameCitopatologicoColoUteroController extends Controller
{
public function __invoke($atendimentoId)
{
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
$data = $this->getDadosNaoSalvos();
}
else {
$data = $this->getDadosAtendimento($atendimentoId);
}
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-exame-citopatologico-colo-utero', $data)
->setOption('margin-bottom', 4)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 4)
->setOption('enable-local-file-access', true)
->setPaper('a4')
->setOrientation('portrait');
$pdf->setTimeout(180);
return $pdf->inline('requisicao-exame-citopatologico-colo-utero.pdf');
}
private function getDadosNaoSalvos()
{
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$paciente = Paciente::findOrFail(request()->paciente_id);
return [
'requisitante' => [
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
],
'paciente' => [
'prontuario' => mb_str_split($paciente->prontuario),
'cns' => mb_str_split($paciente->cidadao->cns),
'cpf' => mb_str_split($paciente->cidadao->cpf),
'nome' => mb_str_split($paciente->cidadao->nome),
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
'nacionalidade' => $paciente->cidadao->nacionalidade->descricao ?? null,
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (string) $paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => [[]],
];
}
private function getDadosAtendimento($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$hasExame = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->whereHas('exame', fn ($q) => $q
->whereIn('codigo', [
Procedimento::COLETA_DE_MATERIAL_DO_COLO_DE_UTERO_PARA_EXAME_CITOPATOLOGICO,
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA,
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA_RASTREAMENTO,
])
)
->exists();
if ($hasExame) {
$solicitacoesExames->push([]);
}
});
});
return [
'requisitante' => [
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
],
'paciente' => [
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
'nacionalidade' => $atendimento->paciente->cidadao->nacionalidade->descricao ?? null,
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (string) $atendimento->paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($atendimento->paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => $solicitacoesExames,
];
}
}

View File

@@ -0,0 +1,201 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Sigtap\Procedimento;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class RequisicaoExameCitopatologicoMamaController extends Controller
{
public function __invoke($atendimentoId)
{
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
$data = $this->getDadosNaoSalvos();
}
else {
$data = $this->getDadosAtendimento($atendimentoId);
}
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-exame-citopatologico-mama', $data)
->setOption('margin-bottom', 4)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 4)
->setOption('enable-local-file-access', true)
->setPaper('a4')
->setOrientation('portrait');
$pdf->setTimeout(180);
return $pdf->inline('requisicao-exame-citopatologico-mama.pdf');
}
private function getDadosNaoSalvos()
{
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$paciente = Paciente::findOrFail(request()->paciente_id);
return [
'requisitante' => [
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($paciente->prontuario),
'cns' => mb_str_split($paciente->cidadao->cns),
'cpf' => mb_str_split($paciente->cidadao->cpf),
'is_sexo_masculino' => $paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($paciente->cidadao->nome),
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
'rg' => [
'numero' => mb_str_split($paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (string) $paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'endereco' => [
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => [[]],
];
}
private function getDadosAtendimento($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$hasExame = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->whereHas('exame', fn ($q) => $q
->whereIn('codigo', [
Procedimento::EXAME_CITOPATOLOGICO_DE_MAMA
])
)
->exists();
if ($hasExame) {
$solicitacoesExames->push([]);
}
});
});
return [
'requisitante' => [
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
'is_sexo_masculino' => $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $atendimento->paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
'rg' => [
'numero' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (string) $atendimento->paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'endereco' => [
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => $solicitacoesExames,
];
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Sigtap\Procedimento;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class RequisicaoExameHistopatologicoMamografiaController extends Controller
{
private const TITLE = 'REQUISIÇÃO DE EXAME HISTOPATOLÓGICO - MAMOGRAFIA';
private const TEMPLATE = 'ambulatorio.requisicao-exame-histopatologico-mamografia';
public function __invoke($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$hasExame = $solicitacao->itens()
->whereHas('exame', fn ($q) => $q
->whereIn('codigo', [
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_BIOPSIA,
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_PECA_CIRURGICA,
])
)
->exists();
if ($hasExame) {
$solicitacoesExames->push([]);
}
});
});
$data = [
'requisitante' => [
'unidade' => $atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia,
'cnes' => $atendimento->createdLotacao->infraestrutura->unidade->cnes,
'municipio_uf' => $atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome
. " / {$atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf}",
'ibge' => $atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge,
],
'paciente' => [
'prontuario' => $atendimento->paciente->prontuario,
'cns' => MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns),
'cpf' => MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf),
'sexo' => $atendimento->paciente->cidadao->sexo->descricao ?? null,
'nome' => $atendimento->paciente->cidadao->nome,
'nome_social' => $atendimento->paciente->cidadao->nome_social,
'nome_mae' => $atendimento->paciente->cidadao->nome_mae,
'rg' => [
'numero' => $atendimento->paciente->cidadao->carteiraIdentidade->numero ?? null,
'orgao_emissor' => $atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? null,
'uf' => $atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? null,
],
'data_nascimento' => is_null($atendimento->paciente->cidadao->data_nascimento)
? null
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('d/m/Y'),
'idade' => $atendimento->paciente->cidadao->idade_formatada,
'raca_cor' => is_null($atendimento->paciente->cidadao->raca_cor_id)
? null
: ($atendimento->paciente->cidadao->racaCor->descricao . (
$atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA
&& !is_null($atendimento->paciente->cidadao->etnia_indigena_id)
? " ({$atendimento->paciente->cidadao->etniaIndigena->descricao})"
: ''
)),
'endereco' => is_null($atendimento->paciente->cidadao->domicilio_id)
? null
: $atendimento->paciente->cidadao->domicilio->endereco->completo,
'cep' => MaskUtil::getCepMasked($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep),
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
'telefone' => MaskUtil::getPhoneMasked($atendimento->paciente->cidadao->telefone_principal->numero ?? null),
'escolaridade' => $atendimento->paciente->cidadao->escolaridade->descricao ?? null,
],
'solicitacoes' => $solicitacoesExames,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,205 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Sigtap\Procedimento;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Utils\DataUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class RequisicaoMamografiaController extends Controller
{
public function __invoke($atendimentoId)
{
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
$data = $this->getDadosNaoSalvos();
}
else {
$data = $this->getDadosAtendimento($atendimentoId);
}
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-mamografia', $data)
->setOption('margin-bottom', 4)
->setOption('margin-left', 2)
->setOption('margin-right', 2)
->setOption('margin-top', 4)
->setOption('enable-local-file-access', true)
->setPaper('a4')
->setOrientation('portrait');
$pdf->setTimeout(180);
return $pdf->inline('requisicao-mamografia.pdf');
}
private function getDadosNaoSalvos()
{
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$paciente = Paciente::findOrFail(request()->paciente_id);
return [
'requisitante' => [
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($paciente->prontuario),
'cns' => mb_str_split($paciente->cidadao->cns),
'cpf' => mb_str_split($paciente->cidadao->cpf),
'is_sexo_masculino' => $paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($paciente->cidadao->nome),
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
'nacionalidade' => $paciente->cidadao->nacionalidade->descricao ?? null,
'rg' => [
'numero' => mb_str_split($paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
? ''
: (string) $paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => [[]],
];
}
private function getDadosAtendimento($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$hasExame = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->whereHas('exame', fn ($q) => $q
->whereIn('codigo', [
Procedimento::MAMOGRAFIA,
Procedimento::MAMOGRAFIA_BILATERAL_PARA_RASTREAMENTO,
])
)
->exists();
if ($hasExame) {
$solicitacoesExames->push([]);
}
});
});
return [
'requisitante' => [
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
'ibge' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
],
'paciente' => [
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
'is_sexo_masculino' => $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
'is_sexo_feminino' => $atendimento->paciente->cidadao->sexo_id === Sexo::FEMININO,
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
'nacionalidade' => $atendimento->paciente->cidadao->nacionalidade->descricao ?? null,
'rg' => [
'numero' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->numero ?? ''),
'orgao_emissor' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
],
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
? ''
: (string) $atendimento->paciente->cidadao->idade['anos']),
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
'etnia_indigena' => Str::substr($atendimento->paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
'endereco' => [
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
: ''),
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
],
'telefone' => [
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
],
'is_escolaridade_analfabeta' => false,
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
],
'solicitacoes' => $solicitacoesExames,
];
}
}

View File

@@ -0,0 +1,351 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoSoapExameSolicitado;
use App\Models\Ambulatorio\AtendimentoSoapTriagemNeonatalSolicitado;
use App\Models\Ambulatorio\ClassificacaoRisco;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\Ciap;
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
use App\Models\Sigtap\Cid;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
use Carbon\Carbon;
class ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController extends Controller
{
private const TITLE = 'SERVIÇO DE ANÁLISES, DIAGNÓSTICOS E TERAPIA, SOLICITAÇÃO DE EXAMES (SADAT)';
private const TEMPLATE = 'ambulatorio.servico-analise-diagnostico-terapia-solicitacao-exame';
public function __invoke($atendimentoId, $dados = [])
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$dadosNaoSalvos = self::getDadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(
request()->atendimento_id,
AtendimentoImpressaoTipo::SERVICO_DE_ANALISES_DIAGNOSTICOS_E_TERAPIA_SOLICITACAO_DE_EXAMES_SADAT
);
return Pdf1::generate(self::TITLE, self::TEMPLATE, $dadosNaoSalvos);
} else {
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getAtendimento($atendimentoId, $dados));
}
}
public static function getDadosNaoSalvos($pacienteId) {
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$solicitacoesExames = collect();
foreach (request()->exames as $solicitacao) {
$itens[] = [
'exame' => [
'codigo' => $solicitacao['codigo'],
'nome' => $solicitacao['nome'],
],
];
};
$solicitacoesExames->push([
'data' =>Carbon::now()->format('d/m/Y') ?? null,
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : '-',
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : '-',
'classificacao_risco' => ClassificacaoRisco::findOrFail(request()->classificacao_risco_id)->descricao_encaminhamento,
'justificativa' => request()->justificativa,
'observacao' => request()->observacao,
'itens' => $itens,
'informacoes_administrativas' => [
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
. $currentLotacao->ocupacao->nome,
'documento' => $currentLotacao->usuario->registro_tipo_id
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $currentLotacao->usuario->registro_tipo_outro
: $currentLotacao->usuario->registroTipo->sigla
) . ": {$currentLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
]);
return [
'paraAssinar' => false,
'requisitante' => [
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
],
'paciente' => [
'prontuario' => $paciente->prontuario,
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
'idade' => $paciente->cidadao->idade_formatada,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao,
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'endereco' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco),
'logradouro' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->nome,
'numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->numero,
'sem_numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->sem_numero,
'complemento' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->complemento ?? '',
'cep' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep
? MaskUtil::getCepMasked(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep)
: null,
'municipio' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->nome,
'ibge' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->ibge,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'solicitacoes' => $solicitacoesExames,
];
}
public static function getAtendimento($atendimentoId, $dados = []) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$solicitacoesExames = collect();
$regulacaoData = self::getRegulacaoData();
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
if (!isset($dados['itens'])) {
$dados['itens'] = request()->itens;
}
$solicitacoesItensIds = isset($dados['itens'])
? collect($dados['itens'])->where('tipo_solicitacao', 'padrao')->pluck('id')
: null;
$atendimento->soaps()
->where('is_rascunho', false)
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
->get()
->each(function ($soap) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) {
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) {
$itens = $solicitacao->itens()
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
->when(isset($solicitacoesItensIds), fn ($q) => $q->whereIn('id', $solicitacoesItensIds))
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::LABORATORIAL))
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('exame_id', $ids))
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->exame->codigo),
'nome' => $item->exame->nome,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
'classificacao_risco' => $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
'informacoes_administrativas' => [
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
. $solicitacao->createdLotacao->ocupacao->nome,
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
]);
}
});
});
if (!isset(request()->solicitacao_exame_item_id)) {
$solicitacoesPredefinidos = isset($dados['itens'])
? collect($dados['itens'])->where('tipo_solicitacao', 'predefinido')
: null;
AtendimentoSoapExameSolicitado::whereHas('soap', function ($q) use ($atendimento) {
$q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id);
})
->get()
->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) {
$itens = $solicitacao->examesSolicitados()
->when(isset($solicitacoesPredefinidos), fn ($q) => $q
->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id'))
)
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
'nome' => $item->descricao,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
'classificacao' => null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
'informacoes_administrativas' => [
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
. $solicitacao->createdLotacao->ocupacao->nome,
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
]);
}
});
$solicitacoesPredefinidos = isset($dados['itens'])
? collect($dados['itens'])->where('tipo_solicitacao', 'triagem_neonatal')
: null;
AtendimentoSoapTriagemNeonatalSolicitado::whereHas('soap', function ($q) use ($atendimento) {
$q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id);
})
->get()
->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) {
$itens = $solicitacao->triagensNeonatalSolicitados()
->when(isset($solicitacoesPredefinidos), fn ($q) => $q
->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id'))
)
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
'nome' => $item->descricao,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
'classificacao' => null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
'informacoes_administrativas' => [
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
. $solicitacao->createdLotacao->ocupacao->nome,
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
]);
}
});
}
return [
'paraAssinar' => $paraAssinaturaEletronica,
'requisitante' => [
'unidade' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->nome_fantasia,
'cnes' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->cnes,
],
'paciente' => [
'prontuario' => $atendimento->paciente->prontuario,
'nome' => $atendimento->paciente->cidadao->nome,
'nome_social' => $atendimento->paciente->cidadao->nome_social,
'idade' => $atendimento->paciente->cidadao->idade_formatada,
'cns' => $atendimento->paciente->cidadao->cns ? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $atendimento->paciente->cidadao->cpf ? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $atendimento->paciente->cidadao->sexo->descricao,
'data_nascimento' => $atendimento->paciente->cidadao->data_nascimento
? $atendimento->paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $atendimento->paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $atendimento->paciente->cidadao->domicilio->endereco->numero ?? null,
'sem_numero' => $atendimento->paciente->cidadao->domicilio->endereco->sem_numero ?? null,
'complemento' => $atendimento->paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $atendimento->paciente->cidadao->domicilio
? MaskUtil::getCepMasked( $atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep)
: null,
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'telefones' => $atendimento->paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $atendimento->paciente->unidade->nome_fantasia ?? null,
],
'solicitacoes' => $solicitacoesExames,
];
}
private static function getRegulacaoData()
{
$regulacaoData = [
'soap_id' => null,
'exames_ids' => null,
];
if (request()->regulacao_solicitacao_id) {
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
}
return $regulacaoData;
}
}

View File

@@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers\Impressao\Apac;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Competencia;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Services\Apac\RelatorioInconsistenciaService;
use App\Utils\Exports\Pdf1;
use App\Utils\MaskUtil;
class RelatorioInconsistenciaController extends Controller
{
private const TITLE = 'RELATÓRIO DE INCONSISTÊNCIA';
private const TEMPLATE = 'apac.relatorio-inconsistencia';
public function __invoke()
{
$competencia = Competencia::find(request()->competencia_id);
$tipoInconsistencia = request()->tipo_inconsistencia === 'procedimento-principal'
? 'Procedimento principal' : 'Procedimento secundário';
$unidadeExecutante = request()->unidade_executante_id ? Unidade::findOrFail(request()->unidade_executante_id) : null;
$usuarioExecutante = request()->usuario_executante_id ? Usuario::findOrFail(request()->usuario_executante_id) : null;
$ocupacao = request()->ocupacao_id ? Ocupacao::findOrFail(request()->ocupacao_id) : null;
$procedimento = request()->procedimento_id ? Procedimento::findOrFail(request()->procedimento_id) : null;
$cid = null;
if (count(request()->cids) === 1) {
$cid = Cid::findOrFail(request()->cids[0]);
$cid = MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}";
}
else {
$cid = count(request()->cids) . ' cids selecionados';
}
$itens = RelatorioInconsistenciaService::index();
$data = [
'competencia' => $competencia->valor,
'tipo_inconsistencia' => $tipoInconsistencia,
'unidade_executante' => $unidadeExecutante->nome_fantasia ?? 'Todas',
'usuario_executante' => $usuarioExecutante->cidadao->nome ?? 'Todos',
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
'procedimento' => $procedimento ? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
'cid' => $cid,
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\AtividadeColetiva\FichaAtividadeColetivaService;
use App\Utils\Exports\Pdf1;
class FichaAtividadeColetivaController extends Controller
{
private const TITLE = 'FICHA DE ATIVIDADE COLETIVA';
private const TEMPLATE = 'atencao-basica.ficha-atividade-coletiva';
public static function getTemplate($id)
{
return [
'atividade' => FichaAtividadeColetivaService::index($id),
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\CadastroDomiciliar\FichaService;
use App\Utils\Exports\Pdf1;
class FichaCadastroDomiciliarController extends Controller
{
private const TITLE = 'CADASTRO DOMICILIAR';
private const TEMPLATE = 'atencao-basica.ficha-cadastro-domiciliar';
public static function getTemplate($id)
{
return [
'domicilio' => FichaService::index($id),
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\CadastroIndividual\FichaService;
use App\Utils\Exports\Pdf1;
class FichaController extends Controller
{
private const TITLE = 'CADASTRO INDIVIDUAL';
private const TEMPLATE = 'atencao-basica.ficha';
public static function getTemplate($id)
{
return [
'paciente' => FichaService::index($id),
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\CadastroDomiciliar\FichaResidenteService;
use App\Utils\Exports\Pdf1;
class FichaResidentesController extends Controller
{
private const TITLE = 'LISTAGEM DE RESIDENTES';
private const TEMPLATE = 'atencao-basica.ficha-residentes';
public static function getTemplate($id)
{
return [
'domicilio' => FichaResidenteService::index($id),
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\VisitaDomiciliar\HistoricoService;
use App\Utils\Exports\Pdf1;
class FichaVisitaDomiciliar extends Controller
{
private const TITLE = 'FICHA DE VISITA DOMICILIAR';
private const TEMPLATE = 'atencao-basica.ficha-visita-domiciliar';
public static function getTemplate($id)
{
return HistoricoService::getVisitaDomiciliar($id);
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\AtencaoBasica\RelatorioAcessoCuidadoProgramadoService;
use App\Utils\Exports\Pdf1;
class RelatorioAcessoCuidadoProgramadoController extends Controller
{
private const TITLE = 'RELATÓRIO C1 - ACESSO AO CUIDADO PROGRAMADO';
private const TEMPLATE = 'atencao-basica.relatorio-acesso-cuidado-programado';
public function __invoke()
{
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$equipe = Equipe::find(request()->equipe_id);
$usuario = Usuario::find(request()->usuario_id);
$data = RelatorioAcessoCuidadoProgramadoService::index();
$data = [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade_id' => request()->unidade_id,
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'equipe_id' => request()->equipe_id,
'equipe' => $equipe->nome ?? 'Todas',
'usuario_id' => request()->usuario_id,
'usuario' => $usuario->nome ?? 'Todos',
'itens' => $data['itens'],
'totalizadores' => $data['totalizadores'],
'tipo_visualizacao' => request()->tipo_visualizacao,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Models\AtencaoBasica\AtendimentoIndividual\ModalidadeAtencaoDomiciliar;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Ocupacao;
use App\Services\AtencaoBasica\RelatorioAtendimentoDomiciliarService;
use App\Utils\Exports\Pdf1;
class RelatorioAtendimentoDomiciliarController extends Controller
{
private const TITLE = 'RELATÓRIO DE ATENDIMENTO DOMICILIAR';
private const TEMPLATE = 'atencao-basica.relatorio-atendimento-domiciliar';
public function __invoke()
{
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$usuario = Usuario::find(request()->usuario_id);
$turno = Turno::find(request()->turno_id);
$ocupacao = Ocupacao::find(request()->ocupacao_id);
$equipe = Equipe::find(request()->equipe_id);
$modalidade = ModalidadeAtencaoDomiciliar::find(request()->modalidade_id);
$itens = RelatorioAtendimentoDomiciliarService::index();
$data = [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'usuario' => $usuario->nome ?? 'Todos',
'turno' => $turno->descricao ?? 'Todos',
'ocupacao' => $ocupacao->nome ?? 'Todos',
'equipe' => $equipe ? ('INE: ' . $equipe->area->numero_ine) : 'Todas',
'modalidade' => $modalidade->descricao ?? 'Todas',
'itens' => $itens,
'colunas' => collect(request()->columns),
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioAtendimentoOdontologico\RelatorioAtendimentoOdontologicoService;
use App\Utils\Exports\Pdf1;
class RelatorioAtendimentoOdontologicoController extends Controller
{
private const TITLE = 'Relatório de Atendimentos Odontológicos';
private const TEMPLATE = 'atencao-basica.relatorio-atendimento-odontologico';
public static function getTemplate()
{
return [
'atendimentos' => RelatorioAtendimentoOdontologicoService::getPrintExportData(),
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Utils\Exports\Pdf1;
class RelatorioAtividadeColetivaController extends Controller
{
private const TITLE = 'Relatório de Atividade Coletiva';
private const TEMPLATE = 'atencao-basica.relatorio-atividade-coletiva';
public function __invoke()
{
$itens = collect(request()->input('itens', []))->map(fn ($item) => (object) $item);
return Pdf1::generate(self::TITLE, self::TEMPLATE, [
'itens' => $itens,
'totalizadores' => request()->input('totalizadores', []),
'colunas' => request()->input('colunas', []),
'filtros' => request()->input('filtros', []),
]);
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Services\AtencaoBasica\RelatorioCuidadoDesenvolvimentoInfantilService;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoDesenvolvimentoInfantilController extends Controller
{
private const TITLE = 'RELATÓRIO DE CUIDADO E DESENVOLVIMENTO INFANTIL';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-desenvolvimento-infantil';
public function __invoke()
{
$resultado = RelatorioCuidadoDesenvolvimentoInfantilService::index(request());
$sortByEquipe = request()->input('sort_by_equipe', 'unidadeNomeFantasia');
$sortDescEquipe = (bool) request()->input('sort_desc_equipe', false);
$sortByBuscaAtiva = request()->input('sort_by_busca_ativa', 'unidadeNomeFantasia');
$sortDescBuscaAtiva = (bool) request()->input('sort_desc_busca_ativa', false);
$resultadoPorEquipe = $sortDescEquipe
? collect($resultado['resultadoPorEquipe'])->sortByDesc($sortByEquipe)->values()->toArray()
: collect($resultado['resultadoPorEquipe'])->sortBy($sortByEquipe)->values()->toArray();
$buscaAtivaDados = $sortDescBuscaAtiva
? collect($resultado['buscaAtiva'])->sortByDesc($sortByBuscaAtiva)->values()->toArray()
: collect($resultado['buscaAtiva'])->sortBy($sortByBuscaAtiva)->values()->toArray();
$unidade = Unidade::find(request()->input('unidade_id'));
$infraestrutura = Infraestrutura::find(request()->input('infraestrutura_id'));
$equipe = Equipe::find(request()->input('equipe_id'));
$pacienteId = request()->input('paciente_id');
$paciente = $pacienteId ? Paciente::with('cidadao')->find($pacienteId) : null;
$sexoMap = [
Sexo::MASCULINO => 'Masculino',
Sexo::FEMININO => 'Feminino',
];
$faixaEtaria = request()->input('faixa_etaria', []);
$data = [
'inicio' => request()->input('periodo.start'),
'fim' => request()->input('periodo.end'),
'quadrimestre' => request()->input('quadrimestre'),
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
'equipe' => $equipe->nome ?? 'Todas',
'sexo' => $sexoMap[request()->input('sexo_id')] ?? 'Todos',
'paciente' => optional(optional(optional($paciente)->first())->cidadao)->nome ?? 'Todos',
'buscaAtiva' => (bool) request()->input('busca_ativa'),
'faixaEtariaInicial' => $faixaEtaria['inicial'] ?? [],
'faixaEtariaFinal' => $faixaEtaria['final'] ?? [],
'totalizadores' => $resultado['totalizadores'],
'resultadoPorEquipe' => $resultadoPorEquipe,
'buscaAtivaDados' => $buscaAtivaDados,
'boasPraticasSelecionadas' => $resultado['boasPraticasSelecionadas'],
'selectedColsBuscaAtiva' => request()->input('selected_cols_busca_ativa', ['pacienteDataNascimento']),
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioCuidadoGestacaoPuerperioService;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoGestacaoPuerperioController extends Controller
{
private const TITLE = 'RELATÓRIO C3 - CUIDADO NA GESTAÇÃO E PUERPÉRIO';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-gestacao-puerperio';
public function __invoke()
{
$data = RelatorioCuidadoGestacaoPuerperioService::getPrintExportData();
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioCuidadoMulherPrevencaoCancerService;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoMulherPrevencaoCancerController extends Controller
{
private const TITLE = 'RELATÓRIO C7 - CUIDADO DA MULHER NA PREVENÇÃO DO CÂNCER';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-mulher-prevencao-cancer';
public function __invoke()
{
$data = RelatorioCuidadoMulherPrevencaoCancerService::getPrintExportData();
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Services\AtencaoBasica\RelatorioCuidadoPessoaComDiabeteService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoPessoaComDiabeteController extends Controller
{
private const TITLE = 'RELATÓRIO C4 - CUIDADO DA PESSOA COM DIABETES';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-pessoa-com-diabete';
public function __invoke()
{
$unidade = Unidade::find(request()->unidade_id);
$equipe = Equipe::find(request()->equipe_id);
$sexo = Sexo::find(request()->sexo_id);
$paciente = Paciente::find(request()->paciente_id);
$itens = RelatorioCuidadoPessoaComDiabeteService::index();
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'ano' => request()->ano ?? null,
'quadrimestre' => self::getQuadrimestre(request()->quadrimestre) ?? null,
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'equipe' => $equipe->nome ?? 'Todas',
'boas_praticas' => request()->boas_praticas ?? [],
'sexo' => $sexo->descricao ?? 'Todos',
'idade_anos_minimo' => request()->idade_anos_minimo ?? '-',
'idade_anos_maximo' => request()->idade_anos_maximo ?? '-',
'paciente' => $paciente->nome ?? 'Todos',
'busca_ativa' => DataUtil::getBooleanValueFromStringBoolean(request()->busca_ativa) ?? false,
'fora_area' => DataUtil::getBooleanValueFromStringBoolean(request()->fora_area) ?? false,
'itens' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
private static function getQuadrimestre($value)
{
switch ($value) {
case 1:
return '1º Janeiro a Abril';
case 2:
return '2º Maio a Agosto';
case 3:
return '3º Setembro a Dezembro';
}
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioCuidadoPessoaHipertensaoService;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoPessoaHipertensaoController extends Controller
{
private const TITLE = 'RELATÓRIO C5 - CUIDADO DA PESSOA COM HIPERTENSÃO';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-pessoa-hipertensao';
public function __invoke()
{
$data = RelatorioCuidadoPessoaHipertensaoService::getPrintExportData();
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioCuidadoPessoaIdosaService;
use App\Utils\Exports\Pdf1;
class RelatorioCuidadoPessoaIdosaController extends Controller
{
private const TITLE = 'RELATÓRIO C5 - CUIDADO DA PESSOA IDOSA';
private const TEMPLATE = 'atencao-basica.relatorio-cuidado-pessoa-idosa';
public function __invoke()
{
$data = RelatorioCuidadoPessoaIdosaService::getPrintExportData();
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioInconsistencia\RelatorioInconsistenciaService;
use App\Utils\Exports\Pdf1;
class RelatorioInconsistenciaController extends Controller
{
private const TITLE = 'RELATÓRIO DE INCONSISTÊNCIA';
private const TEMPLATE = 'atencao-basica.relatorio-inconsistencia';
public static function getTemplate()
{
return RelatorioInconsistenciaService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioIndicadorSadService;
use App\Utils\Exports\Pdf1;
class RelatorioIndicadorSadController extends Controller
{
private const TITLE = 'RELATÓRIO DE INDICADORES SAD';
private const TEMPLATE = 'atencao-basica.relatorio-indicador-sad';
public static function getTemplate()
{
return RelatorioIndicadorSadService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Models\AtencaoBasica\Parametrizacao\Area;
use App\Models\AtencaoBasica\Parametrizacao\Microarea;
use App\Models\AtencaoBasica\VisitaDomiciliar\Desfecho;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\Estabelecimento\Unidade;
use App\Models\Cadastro\Localizacao\Domicilio;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Services\AtencaoBasica\RelatorioVisitaDomiciliarService;
use App\Utils\Exports\Pdf1;
class RelatorioVisitaDomiciliarController extends Controller
{
private const TITLE = 'RELATÓRIO DE VISITA DOMICILIAR';
private const TEMPLATE = 'atencao-basica.relatorio-visita-domiciliar';
public function __invoke()
{
$unidade = Unidade::find(request()->unidade_id);
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
$area = Area::find(request()->area_id);
$midroarea = Microarea::find(request()->microarea_id);
$usuario = Usuario::find(request()->usuario_id);
$paciente = Paciente::find(request()->paciente_id);
$domicilio = Domicilio::find(request()->domicilio_id);
$desfecho = Desfecho::find(request()->desfecho_id);
$itens = RelatorioVisitaDomiciliarService::index();
$data = [
'periodo' => [
'inicio' => request()->periodo['start'],
'fim' => request()->periodo['end'],
],
'unidade' => $unidade->nome_fantasia ?? 'Todas',
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
'area' => $area->descricao ?? 'Todas',
'microarea' => $midroarea->descricao ?? 'Todas',
'usuario' => $usuario->cidadao->nome ?? 'Todos',
'paciente' => $paciente->cidadao->nome ?? '-',
'domicilio' => $domicilio->endereco->completo ?? 'Todos',
'endereco_numero' => request()->endereco_numero ?? '-',
'desfecho' => $desfecho->descricao ?? 'Todos',
'data' => $itens,
];
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, 'landscape');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\Relatorios\RelatorioCadastroConsistenteService;
use App\Utils\Exports\Pdf1;
class RelatorioCadastroConsistenteController extends Controller
{
private const TITLE = 'RELATÓRIO DE CADASTROS CONSISTENTES';
private const TEMPLATE = 'atencao-basica.relatorios.relatorio-cadastro-consistente';
public static function getTemplate()
{
return RelatorioCadastroConsistenteService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,76 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioEstatisticoAtendimentoService;
use App\Utils\Exports\Pdf1;
use App\Utils\MesesAnoUtil;
class RelatorioEstatisticoAtendimentoController extends Controller
{
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE ATENDIMENTOS';
private const TEMPLATE = 'atencao-basica.relatorios.relatorio-estatistico-atendimento';
public static function getTemplate()
{
$data = RelatorioEstatisticoAtendimentoService::search();
$data['filtros'] = request()->all();
return $data;
}
public function __invoke()
{
$data = self::getTemplate();
$filtros = $data['filtros'];
$registros = $data['registros'];
$mesCompetencia = MesesAnoUtil::getNomeMes($filtros['competencia']['mes']);
$competencia = $mesCompetencia . '/' . $filtros['competencia']['ano'];
$unidade = isset($filtros['unidade']) ? $registros[0]->unidade : 'Todas';
$profissional = isset($filtros['profissional']) ? $registros[0]->profissional : 'Todos';
$localAtendimento = isset($filtros['local_atendimento']) ? $registros[0]->local_atendimento : 'Todos';
$prontuario = isset($filtros['prontuario']) ? $registros[0]->prontuario : 'Todos';
$idadeMinima = (isset($filtros['idade_minima']) ? $filtros['idade_minima'] : 0) . ' anos';
$idadeMaxima = isset($filtros['idade_maxima']) ? $filtros['idade_maxima'] . ' anos' : 'Sem limite';
$idade = "$idadeMinima - $idadeMaxima";
$sexo = isset($filtros['sexo']) ? $registros[0]->sexo : 'Ambos';
$hipertenso = isset($filtros['hipertenso']) ? $registros[0]->hipertenso : 'Todos';
$condicaoAvaliada = isset($filtros['condicao_avaliada']) ? $filtros['condicao_avaliada']['descricao'] : 'Todos';
$doencaTransmissivel = isset($filtros['doenca_transmissivel']) ? $filtros['doenca_transmissivel']['descricao'] : 'Todos';
$rastreamento = isset($filtros['rastreamento']) ? $filtros['rastreamento']['descricao'] : 'Todos';
$ciap2 = isset($filtros['ciap2']) ? $filtros['ciap2']['descricao'] : 'Todos';
$cid = isset($filtros['cid']) ? $filtros['cid']['nome'] : 'Todos';
$gestante = isset($filtros['gestante']) ? $registros[0]->gestante : 'Todos';
$diabetico = isset($filtros['diabetico']) ? $registros[0]->diabetico : 'Todos';
$vacinaEmDia = isset($filtros['vacina']) ? $registros[0]->vacina : 'Todos';
$aleitamentoMaterno = isset($filtros['aleitamento_materno']) ? ($registros[0]->aleitamento_materno ?? '-') : 'Todos';
$colunas = collect(request()->selected_columns);
return Pdf1::generate(self::TITLE, self::TEMPLATE, [
'colunas' => $colunas,
'items' => $registros,
'totalizadores' => $data['totalizadores'],
'competencia' => $competencia,
'unidade' => $unidade,
'profissional' => $profissional,
'localAtendimento' => $localAtendimento,
'prontuario' => $prontuario,
'idade' => $idade,
'sexo' => $sexo,
'hipertenso' => $hipertenso,
'condicaoAvaliada' => $condicaoAvaliada,
'doencaTransmissivel' => $doencaTransmissivel,
'rastreamento' => $rastreamento,
'ciap2' => $ciap2,
'cid' => $cid,
'gestante' => $gestante,
'diabetico' => $diabetico,
'vacinaEmDia' => $vacinaEmDia,
'aleitamentoMaterno' => $aleitamentoMaterno,
'totalizadores' => $data['totalizadores']
], 'landscape');
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica\Relatorios;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\RelatorioEstatisticoPacienteCadastradoService;
use App\Utils\Exports\Pdf1;
class RelatorioEstatisticoPacienteCadastradoController extends Controller
{
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE PACIENTES CADASTRADOS';
private const TEMPLATE = 'atencao-basica.relatorio-estatistico-paciente-cadastrado';
public static function getTemplate()
{
return [
'relatorio' => RelatorioEstatisticoPacienteCadastradoService::index(),
'params' => request()->all(),
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate(), 'landscape');
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Impressao\AtencaoBasica;
use App\Http\Controllers\Controller;
use App\Services\AtencaoBasica\CadastroIndividual\TermoRecusaCadastroService;
use App\Utils\Exports\Pdf1;
class TermoRecusaCadastroController extends Controller
{
private const TITLE = 'TERMO DE RECUSA';
private const TEMPLATE = 'atencao-basica.termo-recusa-cadastro';
public static function getTemplate($id)
{
return [
'paciente' => TermoRecusaCadastroService::index($id),
];
}
public function __invoke($id)
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Bpa;
use App\Http\Controllers\Controller;
use App\Services\Bpa\RelatorioBpaConsolidadoService;
use App\Utils\Exports\Pdf1;
class RelatorioBpaConsolidadoController extends Controller
{
private const TITLE = 'RELATÓRIO DE BPA CONSOLIDADO';
private const TEMPLATE = 'bpa.relatorio-bpa-consolidado';
public static function getTemplate()
{
return RelatorioBpaConsolidadoService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Bpa;
use App\Http\Controllers\Controller;
use App\Services\Bpa\RelatorioBpaIndividualizadoService;
use App\Utils\Exports\Pdf1;
class RelatorioBpaIndividualizadoController extends Controller
{
private const TITLE = 'RELATÓRIO DE BPA INDIVIDUALIZADO';
private const TEMPLATE = 'bpa.relatorio-bpa-individualizado';
public static function getTemplate()
{
return RelatorioBpaIndividualizadoService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Impressao\Bpa;
use App\Http\Controllers\Controller;
use App\Services\Bpa\RelatorioQuantitativoProducaoService;
use App\Utils\Exports\Pdf1;
class RelatorioQuantitativoProducaoController extends Controller
{
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PRODUÇÃO';
private const TEMPLATE = 'bpa.relatorio-quantitativo-producao';
public static function getTemplate()
{
return RelatorioQuantitativoProducaoService::getPrintExportData();
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
}
}

Some files were not shown because too many files have changed in this diff Show More