docs(address): update PJ/PF billing address rules in README + add decision doc
README.md: replace old different_person logic with PJ/PF rule description docs/adrese_facturare_variante.md: new file — decision rationale, implementation summary, verification commands, history of the change Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -195,9 +195,10 @@ gomag-vending/
|
|||||||
### Reguli Business
|
### Reguli Business
|
||||||
|
|
||||||
**Parteneri & Adrese:**
|
**Parteneri & Adrese:**
|
||||||
- Prioritate partener: daca exista **companie** in GoMag (billing.company_name) → firma (PJ, cod_fiscal + registru). Altfel → persoana fizica, cu **shipping name** ca nume partener
|
- Prioritate partener: daca exista **companie** in GoMag (billing.company.name SAU billing.company.code) → firma (PJ, cod_fiscal + registru). Altfel → persoana fizica, cu **shipping name** ca nume partener
|
||||||
- Adresa livrare: intotdeauna din GoMag shipping
|
- Adresa livrare: intotdeauna din GoMag shipping
|
||||||
- Adresa facturare: daca shipping name ≠ billing name → adresa shipping pt ambele; daca aceeasi persoana → adresa billing din GoMag
|
- Adresa facturare **PJ**: adresa billing din GoMag (sediul firmei)
|
||||||
|
- Adresa facturare **PF**: adresa shipping din GoMag (ramburs curier pe numele destinatarului)
|
||||||
- Cautare partener in Oracle: cod_fiscal → denumire → create new (ID_UTIL = -3)
|
- Cautare partener in Oracle: cod_fiscal → denumire → create new (ID_UTIL = -3)
|
||||||
|
|
||||||
**Articole & Mapari:**
|
**Articole & Mapari:**
|
||||||
|
|||||||
59
docs/adrese_facturare_variante.md
Normal file
59
docs/adrese_facturare_variante.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Adrese Facturare — Regula PJ vs PF
|
||||||
|
|
||||||
|
## Cum funcționează ACUM
|
||||||
|
|
||||||
|
| Tip client | Adresă livrare ROA | Adresă facturare ROA |
|
||||||
|
|------------|-------------------|----------------------|
|
||||||
|
| **PJ** (company.name SAU company.code populat) | GoMag shipping | GoMag **billing** (sediul firmei) |
|
||||||
|
| **PF** (fără companie) | GoMag shipping | GoMag **shipping** (ramburs curier pe numele destinatarului) |
|
||||||
|
|
||||||
|
**Motivație PF:** Banii ramburs de la curier se întorc pe numele de pe adresa de livrare, deci factura trebuie să fie pe aceeași adresă.
|
||||||
|
|
||||||
|
**Motivație PJ:** Firma vrea factura pe sediul social (adresa billing din GoMag), nu pe adresa de livrare a curierului.
|
||||||
|
|
||||||
|
## Detectie companie (is_company)
|
||||||
|
|
||||||
|
```python
|
||||||
|
is_company = isinstance(company, dict) and (
|
||||||
|
bool(company.get("name")) or bool(company.get("code"))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
Fallback CUI: dacă GoMag trimite `company.name=""` dar `company.code="RO12345678"` → tot PJ.
|
||||||
|
Dacă `company_name` e gol dar există CUI → `denumire` = billing person name.
|
||||||
|
|
||||||
|
## Implementare
|
||||||
|
|
||||||
|
`api/app/services/import_service.py` — Step 3 (billing address):
|
||||||
|
|
||||||
|
```python
|
||||||
|
if is_pj:
|
||||||
|
# PJ: billing address = GoMag billing (company HQ)
|
||||||
|
billing_addr = format_address_for_oracle(order.billing.address, ...)
|
||||||
|
if billing_addr == shipping_addr:
|
||||||
|
addr_fact_id = addr_livr_id # optimizare: reuse dacă identice
|
||||||
|
else:
|
||||||
|
addr_fact_id = cauta_sau_creeaza_adresa(billing_addr)
|
||||||
|
else:
|
||||||
|
# PF: billing = shipping
|
||||||
|
addr_fact_id = addr_livr_id
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verificare
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Audit comenzi existente
|
||||||
|
python3 scripts/verify_address_rules.py --days 7
|
||||||
|
|
||||||
|
# Teste Oracle E2E
|
||||||
|
./test.sh oracle
|
||||||
|
```
|
||||||
|
|
||||||
|
## Istoricul deciziei
|
||||||
|
|
||||||
|
**Înainte (greșit):** logica `different_person` — compara numele billing vs shipping.
|
||||||
|
Dacă difereau → shipping pt ambele. Dacă identice → billing GoMag pt facturare.
|
||||||
|
Problema: PJ cu persoane diferite primeau factura pe adresa de shipping (nu pe sediul firmei).
|
||||||
|
|
||||||
|
**Decizie (2026-04-08):** Regula simplă PJ/PF, indiferent de compararea numelor.
|
||||||
|
Doar comenzile NOI sunt afectate — comenzile existente rămân cu adresele curente.
|
||||||
Reference in New Issue
Block a user