docs(vm201): document ROA + CONTAFIN update server (IIS apps)

Adds vm201-roa-update-server.md describing the two IIS virtual apps under
roa.romfast.ro that distribute application updates to ROMFAST clients:

- /roaupdate -> D:\ROAUPDATE: per-client VFP XML manifests, _ARHIVE ZIPs
  for 35+ ROA modules (ROACONT, ROAFACTURARE, ROAGEST, etc.), SVN-backed
  DB scripts, xmlupdatecreator workflow.
- /contafinupdate -> D:\APPUPDATESERVERAVFP: ActiveVFP server with
  AVFPHandler for *.avfp requests, VFP9 runtime.

Also captures the full IIS site inventory (Default Web Site, ROA2WEB,
Dokploy, Gitea, roa-qr, roa-apps) verified live on 2026-04-25, and lists
the configured client manifests (ROMFAST, ROMPETROL, ARGENTA, etc.).

Cross-references added in proxmox/README.md and vm201-windows/README.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-04-25 22:14:05 +00:00
parent 21f1e9affe
commit e08ffb1b68
3 changed files with 352 additions and 11 deletions

View File

@@ -62,6 +62,7 @@ proxmox/
│ ├── docs/
│ │ ├── vm201-certificat-letsencrypt-iis.md
│ │ ├── vm201-dokploy-infrastructure.md # Arhitectură Dokploy + domenii
│ │ ├── vm201-roa-update-server.md # Server update aplicații ROA + CONTAFIN
│ │ ├── vm201-btgo-playwright-service.md # Scraper BT George (Playwright Python)
│ │ ├── vm201-troubleshooting-backup-nfs.md
│ │ └── vm201-troubleshooting-pana-curent-2026-01-11.md
@@ -307,13 +308,14 @@ ssh claude@100.95.55.51
### VM 201 - Windows 11
**Director:** `vm201-windows/`
**IP:** DHCP | **Host:** pvemini | **Rol:** Reverse proxy IIS, client aplicații, scraper BT George
**IP:** DHCP | **Host:** pvemini | **Rol:** Server update aplicații ROA + CONTAFIN, reverse proxy IIS, client aplicații, scraper BT George
| Fișier | Descriere |
|--------|-----------|
| `README.md` | Configurație hardware, servicii, rețea, backup |
| `docs/vm201-certificat-letsencrypt-iis.md` | Certificate SSL Let's Encrypt, Win-ACME, SNI |
| `docs/vm201-dokploy-infrastructure.md` | Arhitectură Dokploy + domenii |
| `docs/vm201-roa-update-server.md` | Server update aplicații ROA (`/roaupdate`) + CONTAFIN AVFP (`/contafinupdate`) |
| `docs/vm201-btgo-playwright-service.md` | Scraper BT George — Playwright Python SDK, Windows Service |
| `docs/vm201-troubleshooting-backup-nfs.md` | Incident backup NFS (2025-10-08) |
| `docs/vm201-troubleshooting-pana-curent-2026-01-11.md` | Incident pană curent |
@@ -431,6 +433,7 @@ ssh root@10.0.20.201 "qm snapshot 302 pre-test --description 'Before ROA test'"
- **Informații generale** → `vm201-windows/README.md`
- **Configurez site-uri IIS noi (Dokploy)** → `vm201-windows/docs/vm201-dokploy-infrastructure.md`
- **Script setup IIS automat** → `vm201-windows/scripts/setup-new-iis-sites.ps1`
- **Publicare versiune nouă ROA / CONTAFIN către clienți** → `vm201-windows/docs/vm201-roa-update-server.md`
- **Scraper BT George (btgo-playwright)** → `vm201-windows/docs/vm201-btgo-playwright-service.md`
### Dokploy + Traefik (LXC 103)

View File

@@ -8,7 +8,7 @@
- **Host Proxmox:** pvemini (10.0.20.201)
- **Storage:** local-zfs (ZFS pool)
- **Status:** Running (onboot: enabled)
- **Rol:** Client aplicații Windows, SQL*Plus client, Reverse proxy IIS, Monitorizare UPS, Scraper BT George (btgo-playwright)
- **Rol:** Server update aplicații ROA + CONTAFIN, Reverse proxy IIS, Client aplicații Windows, SQL*Plus client, Monitorizare UPS, Scraper BT George (btgo-playwright)
---
@@ -57,16 +57,56 @@ ssh root@10.0.20.201 "qm config 201 | grep -E 'efidisk|virtio'"
- **SSL/TLS Termination** - Certificate Let's Encrypt pentru domenii externe
- **SNI (Server Name Indication)** - Multiple certificate pe același IP
- **Domenii gestionate:**
- roa.romfast.ro
- roa.romfast.ro (+ aplicațiile virtuale `/roaupdate` și `/contafinupdate`)
- roa2web.romfast.ro
- dokploy.romfast.ro
- gitea.romfast.ro
- roa-qr.romfast.ro**NOU** (proxy → LXC 103 Traefik → pdf-qr-app)
- *.roa.romfast.ro**NOU** wildcard (proxy → LXC 103 Traefik → Dokploy apps)
- roa-qr.romfast.ro (proxy → LXC 103 Traefik → pdf-qr-app)
- *.roa.romfast.ro wildcard (proxy → LXC 103 Traefik → Dokploy apps)
**Site-uri IIS active (verificat 2026-04-25):**
| Site | Binding | Path fizic | Rol |
|------|---------|------------|-----|
| Default Web Site | `roa.romfast.ro` :80/:443 + `*` :81 | `C:\inetpub\wwwroot` | Catch-all roa.romfast.ro → 10.0.20.36; conține `/roaupdate` și `/contafinupdate` |
| ROA2WEB | `roa2web.romfast.ro` :80/:443 | `C:\inetpub\roa2web` | Reverse proxy → 10.0.20.36 (web.config-only) |
| Dokploy | `dokploy.romfast.ro` :80/:443 | `C:\inetpub\dokploy` | Proxy → LXC 103 Traefik (Dokploy UI) |
| Gitea | `gitea.romfast.ro` :80/:443 | `C:\inetpub\gitea` | Proxy → LXC 106 Gitea |
| roa-qr | `roa-qr.romfast.ro` :80/:443 | `C:\inetpub\roa-qr` | Proxy → LXC 103 Traefik (pdf-qr-app) |
| roa-apps | `*.roa.romfast.ro` :80/:443 | `C:\inetpub\roa-apps` | Wildcard proxy → LXC 103 Traefik (Dokploy apps) |
**Documentație:** Vezi `vm201-certificat-letsencrypt-iis.md`
**Arhitectură Dokploy:** Vezi `vm201-dokploy-infrastructure.md`
**Server update ROA + CONTAFIN:** Vezi `vm201-roa-update-server.md`
#### 3. Monitorizare UPS
#### 3. Server Update Aplicații ROA + CONTAFIN
- **Sub Default Web Site (`roa.romfast.ro`):**
- `/roaupdate``D:\ROAUPDATE` — distribuie ZIP-urile de update pentru
modulele ROA (ROACONT, ROAFACTURARE, ROAGEST, ROAIMOB, ROARES, ROANOR,
ROASAL, etc. — peste 35 module) plus scripturi DB versionate în SVN.
- `/contafinupdate``D:\APPUPDATESERVERAVFP` — server ActiveVFP (AVFP)
pentru update-urile aplicației CONTAFIN (handler `*.avfp` mapat în IIS).
- **Mecanism update:** stația clientului citește
`https://roa.romfast.ro/roaupdate/<CLIENT>.xml` (manifest VFP cu versiuni
și `fileurl` către `_ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIP`), compară cu
versiunile locale și descarcă diferențele.
- **Clienți configurați:** ROMFAST, ROMPETROL, ARGENTA, AUTOMOTIVE, CLEVER,
CONPRESS, EMS, EUROPEANMETALSERVICES, IMA, ROMCONSTRUCT, SIGMA, VADECO,
VENDING, ACN, AVIS, EDUARD, FRUVIMED, METACOM, METALICA, POLARIS,
PRINTCONCEPT, SOUTH, STEAUANORDULUI, UTMIDIA, VINRAI, VOICU + DEMOROA,
DEVROA, CUSTOMER_4859/4863/4880/4886/4995. Lista completă în
`D:\ROAUPDATE\*.xml`.
- **Build/publicare:** `xmlupdatecreator.exe` regenerează manifestele;
`tasks.bat` face `svn update` pe scripturile DB
(`D:\ROAUPDATE\DATABASE\SCRIPTURI` și `SCRIPTURI_CLAR`).
- **Raportare erori clienți:** endpoint extern
`romfast.dnsalias.com:3000/errors/create_xml` (configurat în
`D:\ROAUPDATE\settings.ini`).
**Documentație:** Vezi `docs/vm201-roa-update-server.md` (structură folder,
format manifest, workflow publicare, riscuri backup).
#### 4. Monitorizare UPS
- **WinNUT Client** - Monitorizare vizuală status UPS în timp real
- **Server NUT:** 10.0.20.201:3493 (pvemini)
- **UPS:** nutdev1 (INNO TECH USB UPS)
@@ -74,7 +114,7 @@ ssh root@10.0.20.201 "qm config 201 | grep -E 'efidisk|virtio'"
**Documentație:** Vezi `ups/docs/INSTALARE-WINNUT.md`
#### 4. Scraper Banca Transilvania George (btgo-playwright)
#### 5. Scraper Banca Transilvania George (btgo-playwright)
- **Repo:** `git@gitea.romfast.ro:romfast/btgo-playwright.git`
- **Stack:** Python + `playwright==1.48.0` (Python SDK direct, nu MCP/CLI)
- **Scop:** Extrage solduri conturi + descarcă CSV tranzacții din `go.bancatransilvania.ro`
@@ -110,14 +150,16 @@ ssh root@10.0.20.201 "qm config 201 | grep -E 'efidisk|virtio'"
- WebSockets Protocol
- HTTP Redirect
- URL Rewrite Module
- **Sites:**
- Default Web Site (roa.romfast.ro)
- Dokploy (dokploy.romfast.ro)
- Gitea (gitea.romfast.ro)
- **Sites (verificat 2026-04-25):**
- Default Web Site (roa.romfast.ro) — conține `/roaupdate` → `D:\ROAUPDATE` și `/contafinupdate` → `D:\APPUPDATESERVERAVFP`; restul proxy → 10.0.20.36
- ROA2WEB (roa2web.romfast.ro) → proxy 10.0.20.36
- Dokploy (dokploy.romfast.ro) → proxy LXC 103 Traefik
- Gitea (gitea.romfast.ro) → proxy LXC 106
- roa-qr (roa-qr.romfast.ro) → proxy LXC 103 Traefik
- roa-apps (*.roa.romfast.ro) → proxy wildcard LXC 103 Traefik
**Configurare SSL:** Vezi `vm201-certificat-letsencrypt-iis.md`
**Server update ROA + CONTAFIN:** Vezi `vm201-roa-update-server.md`
#### 3. Win-ACME
- **Versiune:** v2.2.9.1701
@@ -357,6 +399,7 @@ ssh root@10.0.20.201 "qm delsnapshot 201 pre-update-snapshot"
### Documentație VM 201 Specifică
- **SSL Certificates IIS:** `docs/vm201-certificat-letsencrypt-iis.md`
- **Arhitectură Dokploy + Domenii:** `docs/vm201-dokploy-infrastructure.md`
- **Server Update ROA + CONTAFIN:** `docs/vm201-roa-update-server.md`
- **Scraper BT George (btgo-playwright):** `docs/vm201-btgo-playwright-service.md`
- **Troubleshooting Incident 2025-10-08:** `docs/vm201-troubleshooting-backup-nfs.md`
- **Troubleshooting Pană Curent 2026-01-11:** `docs/vm201-troubleshooting-pana-curent-2026-01-11.md`

View File

@@ -0,0 +1,295 @@
# VM 201 — Server Update Aplicații ROA + CONTAFIN
## Obiectiv
VM 201 găzduiește pe IIS două puncte de distribuție pentru update-urile
aplicațiilor ROMFAST către clienți:
- **`roa.romfast.ro/roaupdate`** — distribuție ZIP-uri + scripturi DB pentru
modulele ROA (peste 35 module: ROACONT, ROAFACTURARE, ROAGEST, etc.).
- **`roa.romfast.ro/contafinupdate`** — server ActiveVFP (AVFP) pentru
update-uri aplicație CONTAFIN.
Aceste două aplicații virtuale trăiesc sub site-ul **Default Web Site**
(`roa.romfast.ro`) și au path-uri fizice pe **D:\\** (separate de IIS root).
---
## Layout IIS pe VM 201 (recap)
```
Default Web Site (roa.romfast.ro) → C:\inetpub\wwwroot (gol, doar landing IIS)
├── /contafinupdate [Application] → D:\APPUPDATESERVERAVFP (AVFP)
├── /roaupdate [Application] → D:\ROAUPDATE (ZIP + XML)
└── /* (catch-all) → proxy → 10.0.20.36 (ROA Windows prod)
ROA2WEB (roa2web.romfast.ro) → C:\inetpub\roa2web (web.config-only proxy → 10.0.20.36)
Dokploy (dokploy.romfast.ro) → proxy LXC 103 Traefik
Gitea (gitea.romfast.ro) → proxy LXC 106
roa-qr (roa-qr.romfast.ro) → proxy LXC 103 Traefik (pdf-qr-app)
roa-apps (*.roa.romfast.ro) → proxy LXC 103 Traefik (Dokploy apps)
Default Web Site → port 81 (binding intern)
```
---
## /roaupdate — Distribuție Module ROA
**Path fizic:** `D:\ROAUPDATE`
**URL public:** `https://roa.romfast.ro/roaupdate/`
**Web.config:** Windows authentication + directory browse activat
### Mecanism Update
1. Aplicația ROA pe stația clientului (instalată din `ROASTART`) descarcă
`https://roa.romfast.ro/roaupdate/<CLIENT>.xml`.
2. XML-ul listează modulele și versiunile curente pentru clientul respectiv,
plus URL-ul ZIP în `_ARHIVE`.
3. Stația compară versiunile cu cele instalate local.
4. Pentru fiecare modul cu versiune nouă, descarcă
`https://roa.romfast.ro/roaupdate/_ARHIVE/<MODUL>/<MODUL>-x.y.z.ZIP`,
dezarhivează și înlocuiește binarele locale.
### Structura `D:\ROAUPDATE`
| Element | Conținut |
|---------|----------|
| `<CLIENT>.xml` | Manifest update per client (vezi mai jos) |
| `ROASTART_<CLIENT>.xml` | Manifest pentru bootstrap-ul `ROASTART` (COMUNROA, ROAPRINT, USERREPORTS) |
| `_ARHIVE/<MODUL>/` | ZIP-urile efective per versiune (ex: `_ARHIVE\ROACONT\ROACONT-2.11.49.ZIP`) |
| `_UPDATE/` | Buffer de pregătire build-uri noi (LastWrite recent = build activ) |
| `<MODUL>/` | Sursele/proiectele VFP per modul (ex: `ROACONT`, `ROAFACTURARE`, `ROARES`) |
| `DATABASE/SCRIPTURI/`, `DATABASE/SCRIPTURI_CLAR/` | Scripturi SQL versiunate în SVN — pull cu TortoiseSVN |
| `xmlupdatecreator.exe` | Tool VFP de generare a XML-urilor de manifest |
| `tasks.bat` | Job orchestrare: `svn update` pe `SCRIPTURI` + `SCRIPTURI_CLAR`, lansare `tasks\tasks.exe` |
| `settings.ini` | Endpoint raportare erori (`romfast.dnsalias.com:3000/errors/create_xml`) |
| `who9.exe`, `romfast_suport.exe` | Utilitare auxiliare (suport remote + diagnostic VFP9) |
| `firmanoua.zip`, `ROAREGISTRATURA.zip` | Pachete inițializare clienți noi |
### Format Manifest Client
Exemplu fragment din `ROMPETROL.xml`:
```xml
<crsxmloutnew>
<item>ROACONT</item>
<version>2.11.49</version>
<fileurl>\_ARHIVE\ROACONT\ROACONT-2.11.49.ZIP</fileurl>
<usermsg/>
</crsxmloutnew>
```
`<usermsg>` — mesaj opțional afișat user-ului în timpul update-ului
(ex: instrucțiuni manuale, restart obligatoriu).
### Module ROA Distribuite (extras din `ROMFAST.xml`)
```
ROAAPROV ROAAUTO ROACOMENZI ROACONT ROACONTRACTE
ROADECL ROADEF ROADEFSALARII ROADEVIZE ROAFACTURARE
ROAFURNIZORI ROAGEST ROAGRESTAURANT ROAHOTEL ROAHOTELCONFIG
ROAIMOB ROAINCHIDSAL ROAJURIDIC ROALUCRARI ROAMANAGER
ROAMASINI ROANOR ROAOBINV ROAOFERTA ROAOFERTARE
ROAPRETURI ROAPRODUCTIE ROAREGISTRATURA ROARES ROARESTAURANT
ROARETAIL ROASAL ROASALSPEC ROASITFIN ROASITOP
ROASUPORT ROAVIN
```
Modulul `ROASTART` (bootstrap) este publicat separat prin
`ROASTART_<CLIENT>.xml` și include: `COMUNROA`, `ROAPRINT`,
`<CLIENT>_USERREPORTS`.
### Clienți Configurați (extras manifeste)
Manifeste per client găsite în `D:\ROAUPDATE`:
```
ABCVAL ACN ARGENTA AUTOHAUS AUTOMOTIVE
AVIS CAMBRIDGE CLEVER CONPRESS CONPRESSHOLDING
EDUARD EMS EUROPEANMETALSERVICES FRUVIMED HANULPIRATILOR
IDEEA IMA METACOM METACOMBUSINESSSRL METALICA
METALICAD.G.SRL POLARIS PRINTCONCEPT ROMCONSTRUCT ROMFAST
ROMPETROL SIGMA SOUTH STEAUANORDULUI UTMIDIA
VADECO VENDING VENDINGMASTERSRL VINRAI VOICU
DEMOROA DEVROA DEVROA2
CUSTOMER_4859 CUSTOMER_4863 CUSTOMER_4880 CUSTOMER_4886 CUSTOMER_4995
```
### Scripturi DB (SVN)
`tasks.bat` apelează TortoiseSVN pentru a aduce ultimele scripturi:
```bat
TortoiseProc.exe /command:update /path:D:\ROAUPDATE\DATABASE\SCRIPTURI\
TortoiseProc.exe /command:update /path:D:\ROAUPDATE\DATABASE\SCRIPTURI_CLAR\
START D:\ROAUPDATE\DATABASE\SCRIPTURI_CLAR\2026
START D:\ROAUPDATE\tasks\tasks.exe
```
Scripturile sunt versionate într-un repo SVN extern (vezi configul
TortoiseSVN local pentru URL).
### Workflow Publicare Versiune Nouă
1. Build modul VFP în `D:\ROAUPDATE\<MODUL>\`.
2. Generează ZIP în `_ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIP`.
3. Rulează `xmlupdatecreator.exe` pentru regenerarea manifestului
`<CLIENT>.xml` cu noua versiune.
4. Pentru update-uri DB: commit scripturi în SVN (la SCRIPTURI sau
SCRIPTURI_CLAR), apoi `tasks.bat` la următoarea rulare aduce update-ul
pe server.
5. Clienții văd noua versiune la următorul check (la pornire ROA sau
manual din meniu).
---
## /contafinupdate — Server ActiveVFP pentru CONTAFIN
**Path fizic:** `D:\APPUPDATESERVERAVFP`
**URL public:** `https://roa.romfast.ro/contafinupdate/`
**Stack:** ActiveVFP (Visual FoxPro server-side) + IIS handler `AVFPHandler`
### Configurare AVFP
`Web.Config` mapează toate request-urile `*.avfp` (și catch-all `*`) către
`AVFPHandler`, plus modulul `MazeComputer.AspManifestHelpers` pentru
procesarea manifestelor:
```xml
<handlers>
<add verb="*" path="*.avfp" name="AVFPHandler" type="AVFPHandler" />
<add verb="*" path="*" name="AVFPRESTHandler" type="AVFPHandler" />
</handlers>
<defaultDocument>
<files>
<clear />
<add value="default.avfp" />
</files>
</defaultDocument>
<system.web>
<identity impersonate="true" />
</system.web>
```
### `appupdateserver.ini`
Configurarea conexiunilor către sursa de update:
```ini
[general]
host=ROA_CENTRAL
user=soft_serii
password=***
downloadpath=d:\_CONTAFINUPDATE
roadownloadpath=d:\ROAUPDATE\_UPDATE
host_clienti=roa_romfast
user_clienti=romfast
password_clienti=***
host_soft=ROA_CENTRAL
user_soft=soft
password_soft=***
```
(Parolele reale sunt în fișierul de pe VM; nu sunt incluse aici.)
### Componente Cheie
| Fișier | Rol |
|--------|-----|
| `default.avfp` | Entry-point AVFP (default document) |
| `activevfp.dll` (+ `.manifest`) | Handler AVFP nativ |
| `vfp9t.dll`, `VFP9RENU.DLL`, `vfp2c32.fll`, `json.fll` | Runtime VFP9 + extensii |
| `msvcr71.dll` | Runtime VC necesar VFP9 |
| `prg/`, `bin/`, `data/`, `reports/` | Cod, binare, date, rapoarte AVFP |
| `Web.Config` | Mapare handler AVFP |
| `setup603.cmd` | Setup AVFP 6.0.3 (instalare runtime + handler) |
| `log.txt` | Log activitate (rotated manual) |
---
## Operațiuni Curente
### Verificare Stare Update Server (din Proxmox)
```bash
# Status IIS + applicații
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- powershell -Command \
\"Import-Module WebAdministration; Get-WebApplication\""
# Modulele ROA cu update recent (ultima săptămână)
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- powershell -Command \
\"Get-ChildItem 'D:\\ROAUPDATE' | Where-Object { \$_.LastWriteTime -gt (Get-Date).AddDays(-7) } | \
Select-Object Name, LastWriteTime\""
# Verificare manifest client (din browser sau curl)
curl -s https://roa.romfast.ro/roaupdate/ROMFAST.xml | head -50
```
### Test Conectivitate Client
De pe stația clientului (sau VM 201 însăși):
```powershell
# Test acces manifest
Invoke-WebRequest -Uri "https://roa.romfast.ro/roaupdate/ROMFAST.xml" -UseBasicParsing |
Select-Object StatusCode, @{n="Length";e={$_.Content.Length}}
# Test descărcare ZIP
Invoke-WebRequest -Uri "https://roa.romfast.ro/roaupdate/_ARHIVE/ROACONT/ROACONT-2.11.49.ZIP" `
-OutFile "$env:TEMP\test.zip" -UseBasicParsing
```
### Restart IIS (după modificări majore)
```bash
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- cmd /c iisreset"
```
---
## Securitate și Acces
- **/roaupdate** rulează cu `authentication mode="Windows"` în web.config.
Dacă se decide accesul anonim pentru clienți (caz uzual), trebuie
verificat că IIS Anonymous Authentication este activ pe folder.
- **/contafinupdate** folosește `identity impersonate=true` — handler-ul AVFP
rulează cu identitatea utilizatorului IIS curent.
- **TLS:** terminat la nivel de IIS pe `roa.romfast.ro` (certificat Let's
Encrypt — vezi `vm201-certificat-letsencrypt-iis.md`).
- **Endpoint raportare erori:** `romfast.dnsalias.com:3000/errors/create_xml`
(din `D:\ROAUPDATE\settings.ini`) — primește XML-uri de eroare de la
clienți. Nu e găzduit pe VM 201; verifică separat dacă serviciul rulează.
---
## Riscuri și Atenționări
- **Backup `D:\ROAUPDATE` și `D:\APPUPDATESERVERAVFP`:** ambele sunt pe
discul `D:`. Backup-ul Proxmox VZDump al VM 201 le acoperă (snapshot
întreg disk virtio0). Dar pentru recovery rapid al unei versiuni
individuale (`_ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIP` șters accidental) e
util un backup separat al folderului.
- **SVN dependency:** scripturile DB sunt în SVN extern. Dacă serverul SVN
cade, `tasks.bat` eșuează la `svn update`. Verifică URL-ul SVN configurat
în TortoiseSVN local.
- **VFP9 runtime:** `D:\APPUPDATESERVERAVFP` depinde de `vfp9t.dll` și
`msvcr71.dll`. Nu redenumi/șterge.
- **Manifest XML cu encoding `Windows-1252`** — la editare manuală păstrează
encoding-ul (nu salva ca UTF-8) altfel parser-ul VFP de pe stația
clientului poate ceda.
---
## Referințe
- README VM 201: `../README.md`
- IIS SSL / Let's Encrypt: `vm201-certificat-letsencrypt-iis.md`
- Arhitectură domenii Dokploy: `vm201-dokploy-infrastructure.md`
- Aplicație CONTAFIN AVFP: documentație externă (ActiveVFP framework)
---
**Ultima actualizare:** 2026-04-25
**Autor:** Marius Mutu