Skip to content

Instantly share code, notes, and snippets.

@douglasgsouza
Last active March 11, 2025 14:11
Show Gist options
  • Save douglasgsouza/78949620e05a65f7ab808037ae447ea8 to your computer and use it in GitHub Desktop.
Save douglasgsouza/78949620e05a65f7ab808037ae447ea8 to your computer and use it in GitHub Desktop.
Feegow Architecture

Nível 1 - Contexto

C4Context
title Modelo C4 de Contexto do Sistema Feegow
Person(usuario, "Usuário da Clínica", "Profissionais, Funcionários e Colaboradores")
System_Ext(externo1, "Parceiros Externos", "NFe, TEF, Gateways de Pagamento,<br>Memed, Autorizadores")
Person_Ext(paciente, "Paciente", "Paciente da clínica")
System_Ext(externo2, "Sites/Sistemas Externos", "Clínicas")

System(feegow, Feegow, "Core / Aplicação Principal ASP")
Container(api, Sub-sistemas, "", "APIs, Microserviços")

Boundary(b1", "Database Infra Layer") {
    SystemDb(db, Servidores de <br>Bancos de Dados, "MySQL")
}

Rel(usuario, feegow, "Usa")
Rel(paciente, api, "Área do Paciente")
BiRel(externo1, api, "Consome")
Rel(externo2, api, "Agendamento Online")

Rel(feegow, api, "Carrega<br>Interfaces")
UpdateRelStyle(feegow, api, $offsetX="-25", $offsetY="-30")

BiRel(feegow, db, "Leitura/Gravação")
UpdateRelStyle(feegow, db, $offsetX="0", $offsetY="-30")

BiRel(api, db, "")
UpdateRelStyle(api, feegow, $offsetX="45", $offsetY="-30")

Loading

Nível 2 - Containers

C4Context
title Modelo C4 do Sistema Feegow
Person(usuario, "Usuário da Clínica", "Profissionais, Funcionários e Colaboradores")
System_Ext(externo2, "Parceiros Externos", "NFe, TEF, Gateways de Pagamento,<br>Memed, Autorizadores")
Person_Ext(paciente, "Paciente", "Paciente da clínica")
System_Ext(externo1, "Sites/Sistemas Externos", "Clínicas")

Boundary(bFeegow, "Feegow") {
    Container(feegowClinic, "Feegow Clinic", "", "Aplicação monolítica ASP<br>ASP Classic, HTML, CSS, Jquery")
    Container(apiInterna, API Interna, "", "Aplicação API e SSR Views<br>PHP Laravel")
    Container(apiPublica, "API Pública", "", "Aplicação REST API<br>PHP Laravel")
    Container(app, App Mobile, "", "React Native")
    Container(financial, Financeiro, "", "NodeJS e React")
    Container(doct, Integração Doctoralia, "", "Serverless Function NodeJS e React")
    Container(labs, Integração Laboratorial, "", "PHP Laravel")
    Container(agendamentoOnline, Agendamento Online, "", "Diferentes versões")
    
    Boundary(database, "Database Infra Layer") {
        ContainerDb(bd1, "BD 1")
        ContainerDb(bd2, "BD 2")
        ContainerDb(bd3, "BD 3")
        ContainerDb(bd4, "BD N...")
    }

    Rel(usuario, feegowClinic, "")
    Rel(usuario, app, "")
    Rel(feegowClinic, apiInterna, "")
    Rel(feegowClinic, labs, "")
    Rel(feegowClinic, financial, "")
    Rel(feegowClinic, doct, "")
    Rel(apiInterna, externo2, "")

    Rel(paciente, agendamentoOnline, "")
    Rel(externo1, agendamentoOnline, "")
    Rel(externo1, apiPublica, "")
}
Loading

Nível 3 - Componentes

C4Context
title Modelo C4 do Sistema Feegow
Person(usuario, "Usuário da Clínica", "Profissionais, Funcionários e Colaboradores")
System_Ext(externo2, "Parceiros Externos", "NFe, TEF, Gateways de Pagamento,<br>Memed, Autorizadores")
Person_Ext(paciente, "Paciente", "Paciente da clínica")
System_Ext(externo1, "Sites/Sistemas Externos", "Clínicas")

System(feegow, Feegow, "Core / Aplicação Principal")

Boundary(bFeegow, "Feegow") {
    Container(feegowClinic, "Feegow Clinic", "", "Aplicação monolítica ASP<br>ASP Classic, HTML, CSS, Jquery")
    Container(apiInterna, API Interna, "", "Aplicação API e SSR Views<br>PHP Laravel")
    Container(apiPublica, "API Pública", "", "Aplicação REST API<br>PHP Laravel")
    Container(app, App Mobile, "", "React Native")
    Container(financial, Financeiro, "", "NodeJS e React")
    Container(doct, Integração Doctoralia, "", "Serverless Function NodeJS e React")
    Container(labs, Integração Laboratorial, "", "PHP Laravel")
    Container(agendamentoOnline, Agendamento Online, "", "Diferentes versões")
    

    Container_Boundary(c1, "Feegow Clinic (ASP)") {
        Component(cadastros, "Cadastros")
        Component(agenda, "Agenda")
        Component(checkIn, "Check-in / Sala de espera")
        Component(prontuario, "Prontuário Eletrônico")
        Component(faturamento, "Faturamento")
        Component(estoque, "Estoque")
        Component(contasAPagar, "Contas a Pagar")
        Component(contasAReceber, "Contas a Receber")
        Component(caixa, "Controle de Caixa")
        Component(odonto, "Odontograma")
        Component(auth, "Autenticação")
        Component(org, "Estrutura Organizacional")

        Boundary(bProntuario, "Prontuário Eletrônico", "component") {
            Component(cadPacientes, "Cadastro Pacientes")
            Component(laudosEFormularios, "Laudos e Formulários")
            Component(diagnosticos, "Diagnósticos")
            Component(prescricoes, "Prescrições Medicamentosas")
            Component(atestados, "Atestados")
            Component(exames, "Pedidos de Exames")
            Component(arquivos, "Arquivos e Imagens")
            Component(encaminhamentos, "Encaminhamentos")
        }
    }

    Container_Boundary(c2, "Feegow API Interna (PHP)") {
        Component(relatorios, "Relatórios")
        Component(pac, "Imagens (PACS)")
        Component(nfe, "Nota Fiscal Eletrônica")
        Component(tef, "TEF")
        Component(autorizador, "Autorizador On-line")
        Component(teleconsulta, "Telemedicina")
        Component(onco, "Oncologia")
        Component(assinatura, "Assinatura Digital")
        Component(impressao, "Impressão")
        Component(areaDoPaciente, "Área do Paciente")
    }

    Boundary(database, "Database Infra Layer") {
        ContainerDb(bd1, "BD 1")
        ContainerDb(bd2, "BD 2")
        ContainerDb(bd3, "BD 3")
        ContainerDb(bd4, "BD N...")
    }
}


Rel(usuario, feegow, "Usa")
BiRel(feegow, feegowClinic, "")
BiRel(feegow, apiInterna, "")
Rel(feegowClinic, cadastros, "")
Rel(apiInterna, relatorios, "")


Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment