# 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 }
}
}
```