Sari la conținut

Domenii — harta bounded contexts

ASYDATA e structurat după Clean Architecture: fiecare bounded context are un folder cu același nume în fiecare strat — Asy.Domain/<Context>/ (entități + reguli), Asy.Application/<Context>/ (interfețe de serviciu + DTO-uri) și Asy.Infrastructure/<Context>/ (implementări, integrări, EF Core). O parte din business-uri sunt împachetate suplimentar ca module Odoo-style sub src/Modules/Asy.Modules.*, descoperite la startup prin assembly scan. Pentru structura de straturi și modularitate vezi Clean Architecture.

Pagina asta e harta: ce face fiecare domeniu, ce entitate/serviciu îl conduce și unde se găsește în cod. Numele de pe board-ul vizual corespund grupelor de mai jos — ASYDATA pe Figma.

  • Entitatea principală e aggregate root-ul din src/Asy.Domain/<Context>/.
  • Serviciul principal e interfața din src/Asy.Application/<Context>/Services/, implementată în src/Asy.Infrastructure/<Context>/.
  • Domeniile marcate 🧩 modul au și un .csproj separat în src/Modules/Asy.Modules.<Nume>/ care implementează Asy.Platform.Modules.IAsyModule (gate per-tenant prin RequireModule(...)).
  • Câteva domenii există doar la nivel Application (fără strat Domain propriu) — marcate explicit.

Achiziția unui client: de la lead până la contract semnat. Vezi fluxul în Achiziție client.

DomeniuCe faceEntitateServiciu
Companies 🧩Entități juridice (firme, clienți, self-managed) cu multi-tenancy, roluri, TVA, statut IT-ParkCompanyICompaniesService
Contacts 🧩Persoane fizice (admin, owner, contabil, persoană de contact) legate de companiiContactIContactsService
Clients 🧩Gestiunea clienților firmei (doar la nivel Application — fără entitate de domeniu proprie)——
CrmPipeline de vânzări + oportunități (deal-uri) cu etape, probabilitate, MRRCrmOpportunityICrmService
OffersOferte / propuneri comerciale (Draft→Sent→Accepted/Rejected), convertibile în contractOfferIOffersService
ContractsContracte de servicii (intrare/ieșire) cu linii recurente; bază pentru generarea facturilorContractIContractsService
PartnersRegistru master de entități juridice (cheie IDNO), partajat între firme; ține starea sync SFSPartnerMasterIPartnersService

Operarea zilnică: import e-Factură, facturare, contabilitate, task-uri. Vezi Operare zilnică.

DomeniuCe faceEntitateServiciu
Efactura 🧩Config integrare SPV/SFS per companie (credențiale SFS criptate, stare sync, mediu)EfacturaIntegrationIEfacturaService
InvoicingFacturi (emise/primite) unificate într-un aggregate prin Direction; leagă e-Factură, MSign, contabilitate, aprobare internăInvoiceIInvoicesService, IInvoiceEFacturaService
AccountingPlan de conturi (din 1C) + reguli de postare pentru înregistrările contabileChartOfAccountEntryIChartOfAccountsService
Banking 🧩Conturi bancare ale companiilor (IBAN, valută) cu mapare la cod contabilBankAccountIBankAccountsService
Tasks 🧩Task-uri de proiect (To-do/Doing/PendingReview/Done) cu assignees, milestones, dependențe, time-entry, reguli recurenteTaskItemITasksService (+ sub-servicii: Projects, Milestones, Followers…)
OperationsLog unificat de operațiuni 1C (postări GL) + interacțiuni umane (apeluri, email, task-uri)OperationLog(DTO-uri + entitate de domeniu)
NumberingContoare secvențiale per (firm, tip) pentru serii de documenteDocumentCounterINumberingService
RemindersReminder-e one-shot pentru scadențele contractelor recurente; urmărește confirmarea/plataPaymentReminderIPaymentRemindersService
ReferenceDate de referință statice: cursuri valutare (BNM), cote TVA — indexate pe datăCurrencyRateIReferenceService

Cum ajung documentele la oameni și cum se semnează. Vezi Comunicare și semnare și paginile de integrări de mai jos.

DomeniuCe faceEntitateServiciuIntegrare
Telegram 🧩 (worker)Bot multi-tenant: leagă chat↔firmă, trimite carduri interactive de e-Factură, flux de aprobare permisiuniTelegramChat, TelegramCardMessageITelegramServiceTelegram
Msign 🧩Cereri de semnătură electronică (PDF/XML) prin MSign (integrator Prasada); ține certificatul semnatarului, statusulMsignRequestIMsignServiceMSign
NotificationsNotificări in-app (bell + drawer) + web push, din evenimente de domeniuNotification, PushSubscriptionINotificationService, IWebPushSenderNotificări
SharingToken-uri publice de partajare: acces read-only la documente + semnare fără cont; universal (contracte/facturi/oferte)DocumentShareIDocumentShareService—
DocumentTemplatesTemplate-uri Google Docs pentru generare PDF (contracte, facturi, HR) cu placeholder-eDocumentTemplateIDocumentTemplateService—

Domeniul Telegram marcat „🧩 (worker)” trăiește în mare parte într-un worker separat — src/Workers/Asy.Workers.Telegram/ — care consumă topicul Kafka firm.events. Vezi Flux event-driven.

Cum se facturează și încasează serviciul de contabilitate. Vezi Monetizare.

DomeniuCe faceEntitateServiciu
BillingConturi de plată / proforme (avans-facturi) emise înainte de factura fiscalăPaymentRequestIBillingServices
PaymentsÎnregistrarea plăților (doar la nivel Application — fără entitate de domeniu proprie)——

Infrastructura transversală pe care stau toate domeniile de business. Vezi Context de sistem și Stack.

DomeniuCe faceEntitateServiciu
UsersPersoane autentificate (Google OAuth); identitate + profilUserIUsersService
TenantsIstoric de atribuiri firmă↔client (cine deservește pe cine, intervale de date)FirmAssignment(directory DB, nivel Infrastructure)
CatalogNomenclator master de bunuri/servicii/lucrări cu SKU, unitate, TVA, coduri contabileNomenclatorINomenclatorService
OnboardingWorkflow-uri de onboarding companie (doar Application)—IOnboardingService
DashboardAgregări/indicatori pentru pagina principală (doar Application)——
LogsAudit logs de activitate (doar Application, DTO-uri)——
AiConfig integrare AI per companie (provider, API key, buget) pentru parsare de conținutAiIntegrationIAiServices
StorageAbstracție de object storage peste MinIO (doar Application)—IObjectStorage

Șapte domenii sunt împachetate ca module separate sub src/Modules/. Fiecare e un .csproj care implementează IAsyModule, e descoperit prin assembly scan (AddAsyModules) și poate fi activat/dezactivat per-tenant cu filtrul RequireModule("modulekey").

ModulFolderDomeniu împachetat
Companiessrc/Modules/Asy.Modules.CompaniesCompanies
Contactssrc/Modules/Asy.Modules.ContactsContacts
Bankingsrc/Modules/Asy.Modules.BankingBanking
Clientssrc/Modules/Asy.Modules.ClientsClients (Application-only)
Efacturasrc/Modules/Asy.Modules.EfacturaEfactura
Msignsrc/Modules/Asy.Modules.MsignMsign
Taskssrc/Modules/Asy.Modules.TasksTasks

Asy.Modules.Companies e template-ul de copiat pentru module noi. Detalii în Clean Architecture.

Domeniile de backend au corespondent în asydata-app-frontend/src/features/. Câteva nume diferă:

Feature frontendDomeniu backend
bancaBanking
facturiInvoicing
nomenclatorCatalog
messengersTelegram
efacturaEfactura
partners, crm, contracts, clientsomonime
notifications, sharing, reminders, operationsomonime
tasks, projects, project-milestones, task-*, recurring-task-rulesTasks (split pe sub-feature-uri)
billing, paymentsBilling / Payments
documentTemplates, reference, logs, ai, aiTokensomonime