# Arquitectura MercaMadrid ## DNA del Mercado - Membrana: invitación por parte de la asociación: mayoristas y minoristas - La asociación asigna roles de mayorista. - Las transacciones son privadas y encriptadas. - Mecanismo de witness *eager* o *lazy*, a definir - También pueden ser los mayoristas los que publiquen la transacción firmada por el minorista. ```mermaid sequenceDiagram SmartphoneMinorista->>MinoristaDNA1: iniciar transacción MinoristaDNA1-->>MayoristaDNA1: transacción MayoristaDNA1-->>MayoristaDNA2: tiene suficiente crédito? MayoristaDNA2-->>MayoristaDNA1: sí MayoristaDNA1-->>TabletMayorista: aceptar transacción? TabletMayorista->>MayoristaDNA1: aceptar MayoristaDNA1->>AsociaciónDNA1: confirmar transacción AsociaciónDNA1-->>AsociaciónDNA2: actualizar crédito AsociaciónDNA1-->>MayoristaDNA1: confirmada ``` ```graphviz graph G { layout="circo"; Asociación -- {Mayorista1 -- {Mayorista2 -- {Minorista1 -- {Minorista2} }}} } ``` ## DNA para los mayoristas - Membrana: invitación por parte de la asociación: solo mayoristas. - La asociación recoge los pagos hechos en el otro DNA y publica el crédito restante en este DNA. - Antes de completar una transacción de crédito de la asociación, el mayorista revisa en este DNA si el minorista tiene suficiente. ```graphviz graph G { layout="circo"; Asociación -- {Mayorista1 -- {Mayorista2 -- {Mayorista3}}} } ``` ## Entorno operativo - siguientes pasos - 1 DNA por empresa mayorista. - Ejecutable que se instala paralelamente al ERP con una UI de configuración. - Este ejecutable también puede hacer otras tareas: hablar con la asociación, sanidad, etc. - Para ver los productos que el mayorista vende, el minorista debe dar permisos. ```graphviz graph G { layout="circo"; subgraph cluster_0 { ERP -- ServicioHC [label = "ws"]; label = "ServidorMayorista"; } subgraph c { ServicioHC -- {AdminEmpresa -- { Vendedor1 -- {{Vendedor2}}}}; color=lightgrey; label="DNA de la empresa"; } subgraph DHT2 { Vendedor1 -- {Minorista1 } } } ```