# Flujo de una Peticion HTTP

## Flujo general

Usuario -> navegador -> Apache/PHP -> `admin/index.php` -> `Vtiger_WebUI::process()` -> `Vtiger_Loader` -> handler -> modelo/servicio -> `PearDatabase` -> `Vtiger_Viewer`/`Vtiger_Response` -> HTML/JSON.

## Paso a paso

1. El navegador solicita `index.php?module=Accounts&view=Detail&record=123`.
2. `index.php` crea `Vtiger_Request` con `$_REQUEST`.
3. `Vtiger_Request::get()` purifica valores con `vtlib_purify()`.
4. `WebUI` inicia sesion, CSRF, usuario e idioma.
5. Si no hay modulo, redirige a Home/DashBoard o Login.
6. Si hay `action`, el tipo es `Action`; si no, el tipo es `View`.
7. `Vtiger_Loader` busca `modules/Accounts/views/Detail.php`; si no existe, usa fallback Vtiger.
8. El handler ejecuta `validateRequest()`, `loginRequired()`, `checkPermission()` y `process()`.
9. Modelos consultan datos con `PearDatabase::pquery()` o entidades `CRMEntity`.
10. La respuesta HTML usa `Vtiger_Viewer`; Ajax/API usa `Vtiger_Response` JSON.

## Ejemplos reales

- Login: `module=Users&action=Login` resuelve `modules/Users/actions/Login.php`.
- Logout: `module=Users&action=Logout` destruye sesion y guarda historial.
- Accounts detail: `modules/Accounts/views/Detail.php` extiende vista base.
- GeoCuentas Ajax: `module=GeoCuentas&action=GeoAjax&mode=geocodeAccount` valida permiso de Accounts y responde JSON.
- Document download: `modules/Documents/actions/DownloadFile.php` valida acceso antes de descargar.
