# Entornos y metodologías

## Desarrollo

El diccionario colaborativo estuvo ceñido a lineamientos definidos en el [metabuscador ](https://docsmetabuscador.comisiondelaverdad.co/)desarrollado en la Comisión de la Verdad. En este sentido, hereda la arquitectura y las tecnologías usadas para este desarrollo. Tenemos entonces los siguientes entornos:

### Tecnologías y arquitectura

**Para el FRONTEND:**

* ReactJS; versión 16.13.1
  * <https://es.reactjs.org/>
* Material-UI; versión 4.11.4

  * <https://v4.mui.com/getting-started/usage/>

**Para el BACKEND:**&#x20;

* MongoDB; versión 5.0.3
  * <https://docs.mongodb.com/>
* NestJS; versión 7.1.5

  * <https://docs.nestjs.com/>

:heavy\_check\_mark: Comunicación entre el frontend y el backend, se realiza a nivel de servicios REST (arquitectura web basada en el protocolo HTTP para mejorar las comunicaciones cliente-servidor). Las peticiones se hacen por GET, POST y PUT; en el caso del diccionario, no se usa DELETE.

:heavy\_check\_mark: **Arquitectura orientada a servicios:** los desarrolladores crean los servicios que luego son consumidos por la aplicación; esto con el fin de reutilizar servicios para los distintos componentes que se van creando. Adicionalmente, permite una identidad misional para todos los desarrollos de la Comisión de la Verdad. Este desarrollo hereda la arquitectura del metabuscador.

:heavy\_check\_mark: Los archivos en los que se desarrolla el código de los formularios, se encuentran en el frontend en:&#x20;

```
sim-frontend/src/app/pages/dictionary
```

Si, por ejemplo, se quiere añadir un campo semántico o modificar alguna variable se debe buscar, dentro del directorio del backend, el archivo `semantic.controller.ts`, con el fin de agregar el campo primero a la estructura y luego modificar el frontend. Sin embargo, si la persona no es especialista no se recomienda modificar la estructura del backend, ya que allí se encuentra toda la configuración del núcleo y las conexiones.

### Metodologías

* **Modelo atómico:** bajo esta metodología se definen: páginas, organismos, moléculas y átomos, que luego pueden ser reutilizados en otros desarrollos. Todos los componentes del metabuscador desarrollado por la Comisión de la Verdad, usan esta misma estrategia con el fin de tener una estructura homogénea.

![Modelo atómico. Fuente: https://www.uifrommars.com/atomic-design-ventajas/](/files/A4J4iegNfECWYlM4jHcT)

* **Programación Sprint Scrum:**
  * Historias de usuario
  * Definición de tableros y actividades (sprints)
  * Planeación y seguimientos

## Buenas prácticas

**Programación Scrum:** se recomienda trabajar bajo la metodología de programación Sprint Scrum, dado que es una metodología que permite la articulación fácil y rápida de modelos simples y funcionales, los cuales pueden ir evolucionando con el feedback y las necesidades del cliente.&#x20;

Bajo esta metodología estaremos en función de un desarrollo iterativo o incremental, el cual consiste en dividir el trabajo en pequeñas partes o bloques temporales (sprint). Al final de cada etapa se entrega una funcionalidad completa. Para estructurar la evolución se recomienda crear el Mínimo Producto Viable (Minimum Viable Product, MVP): producto con suficientes características para satisfacer a los clientes y proporcionar retroalimentación para el desarrollo futuro.&#x20;

**MVP:** herramienta que permite aprender mientras se desarrolla. Gracias a la iteración, el producto evoluciona y se reduce el tiempo para la validación de nuevas ideas.&#x20;

**Estandarizar código:** definir unas reglas de trabajo; es decir, estandarizar la manera en que se van a crear y llamar las funciones, los métodos, las variables, los atributos, etc. La normalización del código es fundamental para el mantenimiento óptimo del desarrollo.

**Comentar el código:** es una buena práctica comentar el código a fin de que se convierta en un texto legible, autoexplicativo y facilite las modificaciones y el mantenimiento.

**Interacción con usuarios:** es una buena práctica tener entrevistas previas con los usuarios del sistema; dichos encuentros permiten entender los requerimientos puntuales y las funcionalidades concretas sobre las que debe basarse el desarrollo. Además, se recomienda encontrar un lenguaje común entre lo técnico del sistema y el requerimiento del usuario, a fin de no generar reprocesos y lograr comunicar fácilmente las funcionalidades del sistema.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docsdiccionario.comisiondelaverdad.co/arquitectura-proyecto/entornos-metodologias-arquitectura.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
