Passa al contenuto principale

Companies

Scopo

Il modulo gestisce le anagrafiche legali e commerciali delle aziende: customer, supplier o entrambe. La scheda company e' il punto di ingresso per dati fiscali, policy credito, contatti, saldo e collegamenti a trunk, fatture, pagamenti e ticket.

Dove

ElementoValore
Route UI/companies, /companies/new, /companies/[id]
Voce di menuClients / Companies
Componenti principaliapps/frontend/src/app/[locale]/(dashboard)/companies/*, apps/frontend/src/components/companies/*, apps/frontend/src/schemas/company.ts

Campi & comportamento

CampoSignificatoValidazione / comportamento
codeCodice interno companyObbligatorio, massimo 32 caratteri nella modale completa; la pagina rapida lo genera da nome + timestamp.
legal_nameRagione socialeObbligatoria, massimo 255 caratteri. In lista e' il link alla detail.
display_nameNome visualizzatoOpzionale, massimo 255 caratteri.
kindRuolo commercialeEnum customer, supplier, both; filtrabile server-side in lista.
tierSegmento commercialeEnum wholesale, reseller, mobile, tier1; filtrabile server-side in lista.
country_iso2PaeseISO2 opzionale; input uppercase, massimo 2 lettere; filtrabile server-side.
timezoneFuso orarioTesto massimo 64 caratteri, default Europe/Rome.
parent_company_idCompany madreSelect popolata da /api/v1/companies; deve essere una company esistente e non la company corrente. L'errore FK viene mostrato come errore specifico.
is_resellerFlag resellerCheckbox.
currencyValuta baseISO3 obbligatorio, default EUR; filtro client-side costruito da valute note e dati caricati.
invoicing_periodPeriodo fatturazioneEnum daily, weekly, biweekly, monthly, quarterly.
payment_term_daysGiorni pagamentoIntero non negativo.
credit_limitLimite creditoNumero non negativo.
credit_policyPolicy superamento creditoEnum warn_only, soft_block, hard_block.
payment_modeModalita' pagamentoEnum prepaid, postpaid.
current_balanceSaldo correnteNumero; la modale lo mostra ma avvisa che dopo la creazione e' gestito dal modulo balance.
invoice_localeLocale fatturaObbligatorio, massimo 8 caratteri, default en_US.
invoice_templateTemplate fatturaOpzionale, massimo 64 caratteri, default default.
stoppedStop trafficoCheckbox nella tab Rates; in lista diventa stato active/stopped filtrato client-side.
stopped_at, stopped_reasonDettaglio stop trafficoData/ora locale e testo opzionale.
primary_*, noc_contact_email, finance_*, rates_*Contatti operativi e finanziariEmail validate come email oppure vuote; rates_email_subject massimo 500 caratteri.
Indirizzo e fiscalita'address_line1, address_line2, city, state, zip, vat_prefix, vat_number, tax_idTesti opzionali; vat_prefix e' ISO2 opzionale, vat_number e tax_id massimo 64 caratteri.
notes, tagsNote operative e tagtags e' inserito come CSV e inviato come array.

Azioni

AzioneDoveEffetto
Create completa/companies, bottone New CompanyModale CompanyModal, POST /api/v1/companies.
Create rapida/companies/newForm minimale per interconnect, POST /api/v1/companies, redirect a /companies/{id}.
Edit/companies/[id], bottone EditPATCH /api/v1/companies/{id} e refresh detail/lista.
Delete/companies/[id], bottone DeleteDELETE /api/v1/companies/{id}; se il backend richiede MFA la UI invia prima POST /api/v1/auth/mfa/challenge con action companies.delete e poi header X-MFA-Challenge-Token. Con status 409 mostra che esistono CDR collegati.
Import CSV/companies, link Import CSVNaviga a /bulk-import.
Export CSV/companies, bottone Export CSVEsporta lato browser le righe filtrate; disabilitato senza risultati.
Consultazione detail/companies/[id]Tab Overview, Trunks, Tariffs, Devices, Invoices, Payments, Tickets, Audit. Alcune tab sono link verso moduli dedicati.

API consumate

Permessi/ruoli

La UI non mostra ruoli espliciti per lista/create/edit. La delete gestisce una richiesta MFA condizionale con action companies.delete. I ruoli RBAC effettivi sono da verificare in backend/RBAC.

Stati & edge case

  • Loading: lista e detail mostrano un box/testo di caricamento.
  • Empty: lista mostra Nessuna company; tab Trunks, Invoices e Tickets hanno empty message dedicati.
  • Errori: lista e detail usano BannerError; parent company FK ha messaggio mirato per evitare confusione con VAT/Tax ID.
  • Filtri server-side: q, kind, tier, country. Filtri client-side: status e currency.
  • Detail Tariffs, Devices e Payments non editano dati locali: rimandano ai moduli /tariffs, /devices, /payments.
  • Audit tab: il backend non espone ancora audit trail filtrato per company; la UI mostra empty state.

Collegamenti