Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Configurable governance, risk and compliance platform for a multi-entity, multi-regulator financial
group with an insurer at its core, built to the PRD "GRC Platform PRD".README 전문 보기 ↗Configurable governance, risk and compliance platform for a multi-entity, multi-regulator financial group with an insurer at its core, built to the PRD "GRC Platform PRD".
The group is modelled as legal entities (licence, regulators, applicable frameworks, own appetite). Every record belongs to an entity or is group-wide. A person's entities are an allow-list: with none ticked they see every entity except walled ones, and records that have no entity. With any ticked, they see only those entities. Owning or creating a record does not widen that. Walled entities (for example a PFA or a bank) stay hidden from people who are not members, in lists, search, exports, the API and board packs. Dashboards roll up with an entity switcher for drill-down.
One record-and-workflow engine; every register below is configuration stored in the database and editable by administrators (Settings, Registers, fields and workflows).
| Module | Registers |
|---|---|
| Enterprise risk (core) | Objectives, risk appetite (group and entity), risk register, controls (with line of defence), KRIs incl. capital against requirement, loss events (NGN/USD, thresholds), emerging risks, risk acceptances, model inventory |
| ORSA and declarations | ORSA workbook compiled from the register, Risk Management Declaration (two different directors), Financial Condition Report |
| Policies | Policy library with approval tiers, attestation campaigns, exceptions |
| Compliance | Frameworks, obligations, control tests, findings, regulatory change, returns calendar, product governance, training |
| Actions | One action log for every source, extensions, independent validation, board and committee meetings |
| Declarations | Conflicts, gifts, outside interests, related parties, personal dealing, fit and proper; nil returns auto-file |
| Cases | Incidents, complaints, claims fraud, whistleblowing, AML/CFT, data breaches, regulatory breaches, HSE, with regulatory clocks and confidentiality walls |
| ESG and HSE | ESG metrics with Scope 1/2 emissions, underwriting screens, HSE inspections, permits |
| Third parties | Register with automatic tiering (incl. intra-group providers and fund trustees), reinsurer security, licences, assessments, outsourcing notifications (30 days, then six-monthly) |
| Internal audit | Audit universe with priority scoring, plan, engagements, working papers, findings |
| Continuity | Important business services, BIAs, plans, exercises |
ISO 27001 and other security frameworks, IT and cyber risk, DPIAs and data privacy management are
deliberately not rebuilt: they come from SecureComply (set SECURECOMPLY_API_URL).
npm install
npm run dev # http://localhost:3000, embedded demo database in ./.pglite
npm test # business rules and end-to-end workflow tests
Without DATABASE_URL the app uses an embedded Postgres (PGlite) seeded with a fictional group,
"Demo Financial Group" (labelled FICTIONAL DEMO DATA in the app). Demo accounts are
role-named, e.g. [email protected] (full list in lib/db/seed.ts and below).
Set DEMO_PASSWORD (12+ characters) for a stable local password. If it is unset, a local seed
prints a random password once in the terminal; it is not written into the source. A deployed demo
uses DEMO_PASSWORD, and without it a random password nobody knows, so the public site never runs
on a published password. Changing DEMO_PASSWORD and redeploying rotates the demo accounts on the
next boot. A database that was seeded while an old fixed local password was in the source is rotated
off that value on the next boot.
| Email (@demofinancial.example) | Person | Role in the demo |
|---|---|---|
| admin | Olumide Bankole | Platform administrator (MFA required) |
| group.cro | Adaeze Okafor | Group Chief Risk Officer (all entities) |
| head.erm | Tunde Bakare | Head of Enterprise Risk, Demo Insurance |
| group.cco | Ngozi Eze | Group CCO, Head of Enterprise Assurance, MLRO |
| compliance.officer | Zainab Lawal | Compliance Officer, Demo Insurance |
| pensions.risk | Hauwa Sani | Risk and Compliance, Demo Pensions (walled) |
| asset.mgmt.risk | Kunle Ajayi | Head of Risk, Demo Asset Management |
| mfb.compliance | Tobi Fashola | Risk and Compliance, Demo Microfinance Bank (walled) |
| infra.bank.cco | Musa Garba | CCO, Demo Infrastructure Bank (walled) |
| chief.auditor | Ibrahim Musa | Group Chief Internal Auditor (third line) |
| investigator | Chidi Okonkwo | Head of Investigations |
| hse.esg | Halima Bello | Group HSE and Sustainability Lead |
| erm.committee.chair | Kemi Adebayo | Director, Chair of ERM Committee |
| independent.director | Ifeoma Nnaji | Independent Non-Executive Director |
| group.cfo | Bola Ogunleye | Group CFO (first line) |
| group.cio | Segun Alabi | Group CIO (first line) |
| head.claims | Funmi Adeyemi | Head of Claims, Demo Insurance |
| head.underwriting | Emeka Nwosu | Head of Underwriting, Demo Insurance |
| head.actuarial | Amaka Obi | Head of Actuarial, Demo Insurance |
| risk.champion | Yusuf Danjuma | Branch manager and risk champion |
The login page never lists accounts or passwords. SHOW_DEMO_HINTS=true only adds a note that trial
details come from your Vernovi contact.
Passwords are scrypt-hashed; sessions are signed cookies bound to the account. Two-step sign-in uses TOTP (RFC 6238, any authenticator app). It is mandatory for administrators, who enrol with a QR code at their first sign-in; an administrator can require it for anyone and reset a lost device in Settings. Everyone else can turn it on from My account.
DATABASE_URL. The schema and seed data are created
on first request; no migration step is needed.CRON_SECRET so the daily reminder job can run. For the demo, set DEMO_PASSWORD (12+ characters). SESSION_SECRET is optional: without it a random
signing key is generated in the database on first boot. For a production client, set
SEED_DEMO=false, ADMIN_EMAIL and ADMIN_PASSWORD to start with a single administrator.
With SEED_DEMO=false the seed never truncates anything. In demo mode, only a database this code
seeded as a demo is ever reset (when SEED_VERSION in lib/db/seed.ts changes), and a reseed
rotates the session signing key.Hosting: functions are pinned to lhr1 (London) and the Neon database is in London. The trial runs in
the UK on fictional data; Nigeria data residency and the NDPA transfer basis are settled before go-live.
4. Daily reminders and escalations run from vercel.json cron at 06:00 UTC.
Create a token in Settings and choose its roles and entities (or group-wide, which still hides walled
entities). The token is not an administrator unless that role is ticked. A call that omits entityId
files into the token's first entity, or leaves the record group-wide when the token is. Then:
curl -H "Authorization: Bearer grc_..." "https://<host>/api/v1/records?type=risk&status=active"
curl -X POST -H "Authorization: Bearer grc_..." -H "Content-Type: application/json" \
-d '{"type":"case","title":"Complaint from broker","data":{"case_type":"Customer complaint","reported_date":"2026-10-12","description":"..."}}' \
https://<host>/api/v1/records
lib/engine/pure.ts (CASE_CLOCK_DAYS, with CASE_CLOCK_BASIS) marked "internal"
or "to confirm" must be agreed with the client; return deadlines marked "to confirm" in the seed
(quarterly ORSA/ERM returns, NGX and SEC dates) need checking against the rulebooks.