Implementação — o que está construído
D2U.NET · Flows · Arquitetura · Testes · Roadmap · Migracao-Legado
Snapshot do código em
C:\Projetos\D2U.NET\D2U.NET\d2u.net\.
Estado: paridade 100% (Onda 9) + Role Inbox pós-onda — cutover operacional ⏳.
Solution
d2u.net.slnx
src/ → Domain · Application · Persistence · Infrastructure · Web · Workers
tools/ → D2U.Tools.Etl (+ Etl.Tests)
tests/ → 5 projetos + Testing — **388 pass** — [Testes](/n/Projects/D2U.NET/Testes) · [Casos-de-Teste](/n/Projects/D2U.NET/Casos-de-Teste)
Docs_New/ → spec + flows 01–22
| Onda | Escopo | Doc repo |
|---|---|---|
| 0–1 | Docs, scaffold, auth, PostgreSQL | onda1-scaffold-completo.md |
| 2 | Jobs FSM, login, DWR base (flows 01–04) | onda2-completa.md |
| 3 | Users/manage CRUD + policy (flow 07) | onda3-completa.md |
| 4 | Payments + webhooks + checkout (flow 05) | onda4-completa.md |
| 5 | 11 relatórios PDF/Excel/CSV (flows 06, 12) | onda5-completa.md |
| 6 | Workers, FTP, integrações (flows 09–10, 16–22) | onda6-completa.md |
| 7 | SuperUser CRUD (flow 08) | onda7-completa.md |
| 8 | ETL MySQL→PG, redirects, hardening | onda8-etl-completa.md |
| 9 | Paridade total legado | onda9-paridade-completa.md |
PostgreSQL 4NF ✅
Detalhe: Docs_New/database/postgresql-schema-design.md · Base-de-Dados
| Item | Valor |
|---|---|
| Motor | PostgreSQL 16 (Docker) |
| Schema | d2u |
| Provider | Npgsql.EntityFrameworkCore.PostgreSQL |
| Migrations | PostgresInitialCreate + fase 2 + Onda9ContentAndContractors + MraOrganizations |
| Tabelas | 16 core + payments, audit, rules, templates, contractors, xml_transcript*, … |
| Compat externa | APIs/DTOs inalterados — enums ordinais legado |
docker compose up -d
dotnet ef database update --project src/D2U.Persistence --startup-project src/D2U.Web
API externa ✅
Detalhe: Docs_New/implementation/api-externa-completa.md
| Grupo | Rotas | Serviços |
|---|---|---|
| DWR | /api/dwr/* (~47) |
IDwrApiService — EF persistido |
| Mobile | /api/mobile/* |
IMobileApiService |
| Auth | /api/auth/authenticate |
IAuthenticateUserService |
| Integrações | /api/integrations/* |
IIntegrationApiService |
| Webhooks | /webhooks/stripe\|realex\|paypal |
PaymentProcessingService + idempotência |
| Documentos | /api/jobs/{id}/document/save |
IDocumentApiService |
| Outside API | POST /Outside/Report/Search, GET /Outside/Download/{token} |
IOutsidePortalService |
| Aliases legados | /webhook, /xmlrpc, /SPS*, servlets uploader, *.do |
LegacyIntegrationAliasEndpoints |
| Data folder | /data/* |
DataFolderEndpoints (anti path-traversal) |
Filtros: CompanyScope, ApiKey, MobileAuth, OutsideToken
UI Razor ✅ (~85 PageModels)
Detalhe: Docs_New/implementation/navegacao-stub-completa.md · onda9-paridade-completa.md
| Item | Valor |
|---|---|
| Páginas Razor | ~85 PageModels funcionais |
| Layouts | _MedTransLayout, _LoginLayout, _SuperUserLayout, _OutsideLayout |
| Navigator | _MedTransNavigator — menu completo legado |
| CSS/imagens | dictate2us-app/web/css + web/images |
| Zero stubs | 28 ecrãs que eram stub → implementados (Onda 9) |
Áreas: MedTrans (Account, Dashboard, Jobs, Users, Manage, Reports, Templates, Settings), SuperUser, Outside.
Funcionalidades chave: job create/edit/split/delete/download, checkout Stripe/RealEx/PayPal, 11 relatórios, contractors, templates, XML transcript, registo/activate/forgot, MFA email.
Camadas
D2U.Domain
- Entidades core + fase 2:
PaymentTransaction,Organization,WorkType,AssignmentRule,DocumentTemplate,Contractor,XmlTranscript*, … JobWorkflowAction,JobStatusGroups, enums legado
D2U.Application
- Auth, company, job creation/edit, workflow FSM
IPaymentService,ISuperUserService,IReportGenerationService,IRegistrationService,IJobFileDownloadService- API interfaces (
IApiServices.cs), validators
D2U.Infrastructure
AuthService,PaymentService,SuperUserService,JobCreationService,JobEditServiceJobDashboardService— inbox/dashboard por role (legadoJobDAOImpl.generateRestrictionRuleByUser)DwrApiService,MobileApiService,IntegrationApiService,ReportGenerationService- Webhooks Stripe/RealEx/PayPal,
OutsidePortalService - Workers wiring, FluentFTP egress, MailKit email
D2U.Web
- Middleware: SecurityHeaders, CompanyResolution, CompanyTheme,
LegacyDoRedirectMiddleware MapApiEndpoints()+MapRazorPages()+ legacy alias endpoints- Cookie auth
d2u.auth, CSRFd2u.csrf,RequireSuperUser ReportPageModelBase— gateCanViewReports
D2U.Persistence
- Npgsql PostgreSQL 16 — schema
d2u, query filter multi-tenantCompanyId - Seed demo: company
demo, usersadmin/client/superadmin
D2U.Workers
- MailReader, FtpScanner, Lexacom download/checker, SpeechLive upload/retry
- Vendor egress outbox, BigHand/TASP ingress, Quartz cleanup jobs
D2U.Tools.Etl
- CLI
migrate/validate/copy-files - 15 migradores core + 5 fase 2 (templates, contractors, …)
- Script:
tools/etl/mysql-to-postgres.ps1
Role Inbox — pós-Onda 9 ✅ (2026-06-12)
Review: Docs_New/reviews/2026-06-12-workflow-inbox-dashboard-review.md
Paridade JobListAction / JobDAOImpl.generateRestrictionRuleByUser / JobManagerImpl:
| Perfil | Inbox / dashboard |
|---|---|
| Admin / Supervisor | Empresa inteira |
| Client | Só ClientId próprio; UI colapsa staff → InProcess |
| MRA | Jobs dos clients das orgs em user_mra_organization |
| Transcriber / Editor / QA | Estágio do papel + AssignedUserId = eu (search relaxa) |
Workflow corrigido:
JobWorkflowEngine.TryTransitionenforced (antes qualquer user podia FinishQa)AssignTranscribergravaAssignedUserId+JobAssignment- Audit log com
userIdreal JobActor(UserId, Role)propagado em Dashboard, Jobs, Search, Detail, Edit…
Código: JobDashboardService.cs, JobWorkflowService.cs, migration MraOrganizations
Testes
388 pass · 0 skip · 0 fail — Testes
| Projeto | Pass |
|---|---|
| D2U.UnitTests | 122 |
| D2U.IntegrationTests | 215 |
| D2U.ContractTests | 24 |
| D2U.WorkersTests | 25 |
| D2U.Tools.Etl.Tests | 2 |
URLs principais
| Route | Tipo |
|---|---|
/MedTrans/Account/Login |
UI + MFA |
/MedTrans/Dashboard |
UI + nav |
/MedTrans/Jobs |
UI CRUD + workflow |
/MedTrans/Download/* |
Downloads ficheiros |
/MedTrans/Account/Checkout |
Payments UI |
/api/dwr/organizations |
API (auth) |
/api/mobile/login |
API |
/webhooks/stripe |
Webhook |
/xmlrpc |
XML-RPC wire protocol |
/Outside/Report?token=… |
Outside UI |
/SuperUser/Dashboard |
SuperUser CRUD |
/health |
Health |
Mapa por flow: Flows
Pendente (operacional / hardening)
- ETL staging:
migrate -Fresh+validate+ dry-run fase 2 - Acceptance checklist manual +
tools/scan/staging-scan.ps1 - Cutover DNS conforme
cutover-etl.md - Config produção:
Email:*,Security:TokenSigningKey,Workers:Egress:*,Mfa:Required - Code review: thank-you pages não devem creditar via GET em produção (usar só webhooks)
Credenciais dev
Todos MedTrans: password ChangeMe123!
| User | Role |
|---|---|
admin |
Administrator |
supervisor |
Supervisor |
client |
Client |
mra |
MRA |
transcriber |
Transcriber |
editor |
Editor |
qa |
QA |
contractor |
ContractorAdministrator |
superadmin |
SuperUser |
| API | X-D2U-Api-Key: test-integration-key |
Comandos
cd C:\Projetos\D2U.NET\D2U.NET\d2u.net
dotnet build d2u.net.slnx
dotnet test d2u.net.slnx
dotnet run --project src/D2U.Web/D2U.Web.csproj