Skip to main content

DTOs ed Enums

In questa sezione sono presenti i DTOs (Data Transfer Objects) e gli Enums utilizzati nel modulo Shared - Anagrafiche. I DTOs definiscono la struttura dei dati in ingresso e in uscita dalle API, mentre gli Enums definiscono i valori consentiti per determinati campi.


🧬 DTOs

Utenti

UserDto (Entity DTO)

DTO che rappresenta un utente del sistema. I dati anagrafici, professionali e fiscali provengono dal default profile dell'utente. Include anche tutti i profili associati e i ruoli.

UserDto

DTO di output che rappresenta un utente completo del sistema. I dati anagrafici provengono dal default profile.

Field
PHP Type
Note
id
int
name
string

Nome completo dell'utente (calcolato)

firstName
string

Nome (dal default profile)

lastName
string

Cognome (dal default profile)

email
string

Email univoca

avatar

nullable - Avatar dell'utente

emailVerifiedAt
?CarbonImmutable

nullable - Data di verifica email

roles

Array di tutti i ruoli associati ai profili dell'utente

role
string

Nome del ruolo del default profile (roles.name)

roleTitle
string

Titolo del ruolo del default profile (human readable)

belonging
string

Appartenenza del default profile (BelongingEnum)

subtype
?string

nullable - Sottotipo specifico del ruolo

companyId
?int

nullable - FK to companies.id

company

nullable - Azienda associata

partnerBranchId
?int

nullable - FK to partner_branches.id

partnerBranch

nullable - Filiale partner associata

isMainManager
?bool

nullable - Indica se è il manager principale

referralProfileCode
?string

nullable - Codice referral profilo (per consulenti), max:255

address
?string

nullable - Indirizzo domicilio, max:255

streetNumber
?string

nullable - Numero civico, max:50

city
?string

nullable - Città, max:255

province
?string

nullable - Provincia (codice), max:255

provinceRelation

nullable - Relazione con provincia

zipCode
?string

nullable - CAP, max:20

country
?string

nullable - Paese (codice ISO 2), size:2

countryRelation

nullable - Relazione con paese

latitude
?float

nullable - Latitudine domicilio

longitude
?float

nullable - Longitudine domicilio

phonePrefix
?string

nullable - Prefisso telefonico, max:20

phoneNumber
?string

nullable - Numero di telefono, max:20

phone
?string

nullable - Telefono completo (prefix + number)

birthDate
?string

nullable - Data di nascita (YYYY-MM-DD)

birthCity
?string

nullable - Città di nascita, max:255

fiscalCode
?string

nullable - Codice fiscale, max:16

vatNumber
?string

nullable - Partita IVA, max:20

legalAddress
?string

nullable - Indirizzo sede legale, max:255

legalStreetNumber
?string

nullable - Numero civico sede legale, max:50

legalCity
?string

nullable - Città sede legale, max:255

legalProvince
?string

nullable - Provincia sede legale, max:255

legalProvinceRelation

nullable - Relazione provincia sede legale

legalZipCode
?string

nullable - CAP sede legale, max:20

legalCountry
?string

nullable - Paese sede legale (ISO 2), size:2

legalCountryRelation

nullable - Relazione paese sede legale

legalLatitude
?float

nullable - Latitudine sede legale

legalLongitude
?float

nullable - Longitudine sede legale

legalRepresentativeFirstName
?string

nullable - Nome rappresentante legale, max:255

legalRepresentativeLastName
?string

nullable - Cognome rappresentante legale, max:255

legalRepresentativeEmail
?string

nullable - Email rappresentante legale, max:255

legalRepresentativePhonePrefix
?string

nullable - Prefisso tel. rappresentante legale, max:20

legalRepresentativePhoneNumber
?string

nullable - Tel. rappresentante legale, max:20

legalRepresentativeBirthDate
?string

nullable - Data nascita rappresentante legale (YYYY-MM-DD)

legalRepresentativeBirthCity
?string

nullable - Città nascita rappresentante legale, max:255

legalRepresentativeFiscalCode
?string

nullable - CF rappresentante legale, max:16

legalRepresentativeVatNumber
?string

nullable - P.IVA rappresentante legale, max:20

companyName
?string

nullable - Ragione sociale, max:255

pec
?string

nullable - PEC, max:255

sdiCode
?string

nullable - Codice SDI, min:7, max:10

taxRegimeCode
?string

nullable - Codice regime fiscale, max:255

taxVatRate
?string

nullable - Aliquota IVA, max:255

taxVatNatureCode
?string

nullable - Codice natura IVA, max:255

taxPensionFundType
?string

nullable - Tipo cassa previdenziale, max:255

taxPensionFundRate
?string

nullable - Aliquota cassa previdenziale, max:255

taxPensionFundVatRate
?string

nullable - IVA cassa previdenziale, max:255

taxPensionFundVatNatureCode
?string

nullable - Codice natura IVA cassa, max:255

iban
?string

nullable - IBAN, max:34

ibanBank
?string

nullable - Banca IBAN, max:255

ibanBeneficiary
?string

nullable - Beneficiario IBAN, max:255

networkCode
?string

nullable - Codice rete, max:255

insuranceCompany
?string

nullable - Compagnia assicurativa, max:255

insurancePolicyNumber
?string

nullable - Numero polizza, max:255

insuranceExpiryDate
?string

nullable - Data scadenza polizza (YYYY-MM-DD)

insuranceCoverage
?string

nullable - Massimale polizza, max:255

professionalRegistryName
?string

nullable - Nome albo professionale, max:255

professionalRegistryNumber
?string

nullable - Numero iscrizione albo, max:255

professionalRegistryProvince
?string

nullable - Provincia albo, max:255

referralProfileCode
?string

nullable - Codice referral profilo (dal default profile), max:255

referral

nullable - Dati completi referral associato al default profile

profiles

nullable - Array di tutti i profili associati all'utente

createdAt
?CarbonImmutable

nullable - Data creazione

updatedAt
?CarbonImmutable

nullable - Data ultimo aggiornamento

Dati dal Default Profile

Il UserDto include tutti i dati anagrafici, professionali e fiscali che provengono dal default profile dell'utente (is_default = true). Se l'utente ha più profili, viene utilizzato quello marcato come default.

I campi role, roleTitle, belonging, subtype, companyId, partnerBranchId, isMainManager e tutti i dati anagrafici/professionali provengono dal default profile.


ProfileDto (Entity DTO)

DTO che rappresenta un profilo del sistema. Un profilo contiene tutti i dati anagrafici, professionali, fiscali e di contatto. I dati fiscali e bancari provengono dalla relazione polimorfica invoice_data.

ProfileDto

DTO di output che rappresenta un profilo completo del sistema

Field
PHP Type
Note
id
int
userId
?int

nullable - FK to users.id

user

nullable - Utente associato al profilo

name
string

Nome completo (calcolato)

firstName
string

Nome

lastName
string

Cognome

email
string

Email del profilo

avatar

nullable - Avatar del profilo

emailVerifiedAt
?CarbonImmutable

nullable - Data di verifica email dall'utente

role
?string

nullable - Nome del ruolo Spatie (roles.name)

roleTitle
?string

nullable - Titolo del ruolo (human readable)

belonging
?string

nullable - Appartenenza (BelongingEnum)

subtype
?string

nullable - Sottotipo specifico del ruolo

companyId
?int

nullable - FK to companies.id

company

nullable - Azienda associata

partnerBranchId
?int

nullable - FK to partner_branches.id

partnerBranch

nullable - Filiale partner associata

isMainManager
?bool

nullable - Indica se è il manager principale

isDefault
?bool

nullable - Indica se è il profilo di default per l'utente

address
?string

nullable - Indirizzo domicilio, max:255

streetNumber
?string

nullable - Numero civico, max:255

city
?string

nullable - Città, max:255

province
?string

nullable - Provincia (codice), max:5

provinceRelation

nullable - Relazione con provincia

zipCode
?string

nullable - CAP

country
?string

nullable - Paese (codice ISO 2), size:2

countryRelation

nullable - Relazione con paese

latitude
?float

nullable - Latitudine domicilio

longitude
?float

nullable - Longitudine domicilio

phonePrefix
?string

nullable - Prefisso telefonico

phoneNumber
?string

nullable - Numero di telefono

phone
?string

nullable - Telefono completo (prefix + number)

birthDate
?string

nullable - Data di nascita (YYYY-MM-DD)

birthCity
?string

nullable - Città di nascita, max:255

identityDocumentType

nullable - Tipo documento di identità

identityDocumentNumber
?string

nullable - Numero documento di identità

identityDocumentIssuingAuthority
?string

nullable - Autorità di rilascio documento

identityDocumentExpiryDate
?string

nullable - Data scadenza documento (YYYY-MM-DD)

fiscalCode
?string

nullable - Codice fiscale (da invoice_data), max:16

vatNumber
?string

nullable - Partita IVA (da invoice_data), max:20

cciaa
?string

nullable - Camera di Commercio

rea
?string

nullable - Numero REA

atecoCode
?string

nullable - Codice ATECO

legalAddress
?string

nullable - Indirizzo sede legale, max:255

legalStreetNumber
?string

nullable - Numero civico sede legale, max:255

legalCity
?string

nullable - Città sede legale, max:255

legalProvince
?string

nullable - Provincia sede legale

legalProvinceRelation

nullable - Relazione provincia sede legale

legalZipCode
?string

nullable - CAP sede legale

legalCountry
?string

nullable - Paese sede legale (ISO 2), size:2

legalCountryRelation

nullable - Relazione paese sede legale

legalLatitude
?float

nullable - Latitudine sede legale

legalLongitude
?float

nullable - Longitudine sede legale

legalRepresentativeFirstName
?string

nullable - Nome rappresentante legale, max:255

legalRepresentativeLastName
?string

nullable - Cognome rappresentante legale, max:255

legalRepresentativeEmail
?string

nullable - Email rappresentante legale, max:255

legalRepresentativePhonePrefix
?string

nullable - Prefisso tel. rappresentante legale

legalRepresentativePhoneNumber
?string

nullable - Tel. rappresentante legale

legalRepresentativeBirthDate
?string

nullable - Data nascita rappresentante legale (YYYY-MM-DD)

legalRepresentativeBirthCity
?string

nullable - Città nascita rappresentante legale, max:255

legalRepresentativeFiscalCode
?string

nullable - CF rappresentante legale, max:16

legalRepresentativeVatNumber
?string

nullable - P.IVA rappresentante legale, max:20

companyName
?string

nullable - Ragione sociale (da invoice_data), max:255

pec
?string

nullable - PEC (da invoice_data), max:255

sdiCode
?string

nullable - Codice SDI (da invoice_data), min:7, max:7

taxRegimeCode

nullable - Codice regime fiscale (da invoice_data)

taxVatRate

nullable - Aliquota IVA (da invoice_data)

taxVatNatureCode

nullable - Codice natura IVA (da invoice_data)

taxPensionFundType

nullable - Tipo cassa previdenziale (da invoice_data)

taxPensionFundRate

nullable - Aliquota cassa previdenziale (da invoice_data)

taxPensionFundVatRate

nullable - IVA cassa previdenziale (da invoice_data)

taxPensionFundVatNatureCode

nullable - Codice natura IVA cassa (da invoice_data)

iban
?string

nullable - IBAN (da invoice_data), max:34

ibanBank
?string

nullable - Banca IBAN (da invoice_data), max:255

ibanBeneficiary
?string

nullable - Beneficiario IBAN (da invoice_data), max:255

networkCode
?string

nullable - Codice rete, max:255

insuranceCompany
?string

nullable - Compagnia assicurativa, max:255

insurancePolicyNumber
?string

nullable - Numero polizza, max:255

insuranceExpiryDate
?string

nullable - Data scadenza polizza (YYYY-MM-DD)

insuranceCoverage
?string

nullable - Massimale polizza, max:255

professionalRegistryName
?string

nullable - Nome albo professionale, max:255

professionalRegistryNumber
?string

nullable - Numero iscrizione albo, max:255

professionalRegistryProvince
?string

nullable - Provincia albo, max:255

referralProfileCode
?string

nullable - Codice referral profilo (per consulenti), max:255

referral

nullable - Dati completi referral associato

createdAt
?CarbonImmutable

nullable - Data creazione

updatedAt
?CarbonImmutable

nullable - Data ultimo aggiornamento

Dati Fiscali da Invoice Data

I dati fiscali e bancari (fiscalCode, vatNumber, pec, sdiCode, taxRegimeCode, taxVatRate, iban, etc.) provengono dalla relazione polimorfica invoice_data. Questa tabella può essere associata a Profile o Company.


ProfileInputDto (Input DTO)

DTO utilizzato per la creazione e aggiornamento di un profilo. Gestisce anche la creazione/aggiornamento dell'utente associato e dei dati fiscali.

ProfileInputDto

DTO di input per create e update di profili. Gestisce anche user e invoice_data.

Field
PHP Type
Note
id
Optional|int|null

nullable - ID del profilo (per update)

userId
Optional|int|null

nullable - ID utente esistente o null per creare nuovo utente

firstName
string

required, min:3, max:255

lastName
string

required, min:3, max:255

email
string

required, email, unique in users table

emailVerified
Optional|bool|null

nullable - Se impostare l'email come verificata

role
Optional|string|null

nullable - Nome ruolo Spatie, must exist in roles table

subtype
Optional|string|null

nullable - Sottotipo del ruolo, max:255

companyId
Optional|int|null

nullable - FK to companies.id (required se belonging = company)

partnerBranchId
Optional|int|null

nullable - FK to partner_branches.id (required se belonging = partner)

isMainManager
Optional|bool|null

nullable - Manager principale

isDefault
Optional|bool|null

nullable - Se impostare come profilo di default

hasAccess
Optional|bool|null

nullable - Se il profilo deve avere accesso alla piattaforma (crea/collega user). Solo 'worker' può avere hasAccess=false

password
Optional|string|null

nullable - Password (required se hasAccess=true e shouldSetPassword=false, min:8)

shouldSetPassword
Optional|bool|null

nullable - Se true, password nullable (utente la imposterà via email)

address
Optional|string|null

nullable - Indirizzo, max:255 (required per alcuni ruoli)

streetNumber
Optional|string|null

nullable - Numero civico, max:255 (required per alcuni ruoli)

city
Optional|string|null

nullable - Città, max:255 (required per alcuni ruoli)

province
Optional|string|null

nullable - Provincia, max:5 (required per alcuni ruoli)

zipCode
Optional|string|null

nullable - CAP, regex:/^[A-Z0-9\s-]{3,10}$/i (required per alcuni ruoli)

country
Optional|string|null

nullable - Paese ISO 2, size:2 (required per alcuni ruoli)

latitude
Optional|float|null

nullable - Latitudine

longitude
Optional|float|null

nullable - Longitudine

phonePrefix
Optional|string|null

nullable - Prefisso tel., min:1, max:20

phoneNumber
Optional|string|null

nullable - Numero tel., validated with PhoneRule

birthDate
Optional|string|null

nullable - Data di nascita (date format)

birthCity
Optional|string|null

nullable - Città di nascita, max:255

legalAddress
Optional|string|null

nullable - Indirizzo sede legale, max:255 (required per alcuni ruoli)

legalStreetNumber
Optional|string|null

nullable - Numero civico sede legale, max:255 (required per alcuni ruoli)

legalCity
Optional|string|null

nullable - Città sede legale, max:255 (required per alcuni ruoli)

legalProvince
Optional|string|null

nullable - Provincia sede legale (required per alcuni ruoli)

legalZipCode
Optional|string|null

nullable - CAP sede legale (required per alcuni ruoli)

legalCountry
Optional|string|null

nullable - Paese sede legale ISO 2, size:2 (required per alcuni ruoli)

legalLatitude
Optional|float|null

nullable - Latitudine sede legale

legalLongitude
Optional|float|null

nullable - Longitudine sede legale

legalRepresentativeFirstName
Optional|string|null

nullable - Nome rappresentante legale, max:255

legalRepresentativeLastName
Optional|string|null

nullable - Cognome rappresentante legale, max:255

legalRepresentativeEmail
Optional|string|null

nullable - Email rappresentante legale, max:255

legalRepresentativePhonePrefix
Optional|string|null

nullable - Prefisso tel. rapp. legale, min:1, max:20

legalRepresentativePhoneNumber
Optional|string|null

nullable - Tel. rapp. legale, validated with PhoneRule

legalRepresentativeBirthDate
Optional|string|null

nullable - Data nascita rapp. legale (date format)

legalRepresentativeBirthCity
Optional|string|null

nullable - Città nascita rapp. legale, max:255

legalRepresentativeFiscalCode
Optional|string|null

nullable - CF rapp. legale, max:16, validated with FiscalCodeRule

legalRepresentativeVatNumber
Optional|string|null

nullable - P.IVA rapp. legale, max:20, validated with VatNumberRule

companyName
Optional|string|null

nullable - Ragione sociale, max:255

fiscalCode
Optional|string|null

nullable - Codice fiscale, max:16, validated with FiscalCodeRule

vatNumber
Optional|string|null

nullable - P.IVA, max:20, validated with VatNumberRule

pec
Optional|string|null

nullable - PEC, email format, max:255 (required se sdiCode vuoto per alcuni ruoli)

sdiCode
Optional|string|null

nullable - Codice SDI, min:7, max:7, validated with SdiCodeRule (required se pec vuoto per alcuni ruoli)

taxRegimeCode

nullable - Codice regime fiscale (required per alcuni ruoli)

taxVatRate

nullable - Aliquota IVA (required per alcuni ruoli)

taxVatNatureCode

nullable - Codice natura IVA (required quando taxVatRate = 0)

taxPensionFundType

nullable - Tipo cassa previdenziale (required per alcuni ruoli)

taxPensionFundRate

nullable - Aliquota cassa (required quando taxPensionFundType != 'none')

taxPensionFundVatRate

nullable - IVA cassa (required quando taxPensionFundType != 'none')

taxPensionFundVatNatureCode

nullable - Natura IVA cassa (required quando taxPensionFundVatRate = 0)

iban
Optional|string|null

nullable - IBAN, max:34, validated with IbanRule (required per alcuni ruoli)

ibanBank
Optional|string|null

nullable - Banca IBAN, max:255

ibanBeneficiary
Optional|string|null

nullable - Beneficiario IBAN, max:255

networkCode
Optional|string|null

nullable - Codice rete, max:255

insuranceCompany
Optional|string|null

nullable - Compagnia assicurativa, max:255

insurancePolicyNumber
Optional|string|null

nullable - Numero polizza, max:255

insuranceExpiryDate
Optional|string|null

nullable - Data scadenza polizza (date format)

insuranceCoverage
Optional|string|null

nullable - Massimale polizza, max:255

professionalRegistryName
Optional|string|null

nullable - Nome albo professionale, max:255

professionalRegistryNumber
Optional|string|null

nullable - Numero iscrizione albo, max:255

professionalRegistryProvince
Optional|string|null

nullable - Provincia albo, max:255

referralProfileCode
Optional|string|null

nullable - Codice referral profilo, regex:/^[A-Z0-9]{1,3}$/i, max:3 (required se belonging = partner)

Validazioni per ruolo

I campi richiesti variano in base al ruolo selezionato. Ad esempio:

  • Ruoli interni (admin, backoffice, etc.): richiedono i campi del domicilio
  • Designer (singolo-progettista): richiedono domicilio e dati fiscali
  • Designer (studio-progettazione): richiedono sede legale e dati fiscali
  • Safety Officer: richiedono domicilio, sede legale e dati fiscali
  • Worker: può avere hasAccess=false (profilo senza utente)
  • Vedere ProfileInputDto::getRoleSpecificRules() per i dettagli completi
Gestione User e Invoice Data

Il ProfileInputDto gestisce automaticamente:

  • User: Se hasAccess=true, crea o aggiorna l'utente associato. Se userId è fornito, collega il profilo a un utente esistente.
  • Invoice Data: I dati fiscali e bancari vengono salvati nella tabella polimorfica invoice_data associata al profilo.

CreateUserDto (Input DTO) - DEPRECATO

Deprecato

Questo DTO è stato deprecato. Utilizzare ProfileInputDto per creare nuovi profili e utenti.


UpdateUserDto (Input DTO) - DEPRECATO

Deprecato

Questo DTO è stato deprecato. Utilizzare ProfileInputDto per aggiornare profili e utenti esistenti.


DTOs Correlati

DTO utilizzato per la creazione di un nuovo utente. Estende AbstractUserInputDto e aggiunge la gestione della password.

CreateUserDto

DTO di input per la creazione di un nuovo utente

Field
PHP Type
Note
avatar
Optional|UploadedFile|null

nullable - File immagine avatar, max:5MB

firstName
string

required, min:3, max:255

lastName
string

required, min:3, max:255

email
string

required, email, unique in users table

password
string

required (o nullable se shouldSetPassword=true), min:8

confirmPassword
string

required (o nullable se shouldSetPassword=true), min:8, must match password

emailVerified
?bool

nullable - Se impostare l'email come verificata

shouldSetPassword
bool|Optional|null

nullable - Se false, password richiesta; se true, password nullable

role
string

required, must exist in roles table

subtype
Optional|string|null

nullable - Sottotipo del ruolo, max:255

companyId
Optional|int|null

nullable - FK to companies.id

partnerBranchId
Optional|int|null

nullable - FK to partner_branches.id

isMainManager
Optional|bool|null

nullable - Manager principale

referralProfileCode
Optional|string|null

nullable - Codice referral profilo (per consulenti), max:255

address
Optional|string|null

nullable - Indirizzo, max:255 (required per alcuni ruoli)

streetNumber
Optional|string|null

nullable - Numero civico, max:50 (required per alcuni ruoli)

city
Optional|string|null

nullable - Città, max:255 (required per alcuni ruoli)

province
Optional|string|null

nullable - Provincia, max:255 (required per alcuni ruoli)

zipCode
Optional|string|null

nullable - CAP, regex:/^[A-Z0-9\s-]{3,10}$/i (required per alcuni ruoli)

country
Optional|string|null

nullable - Paese ISO 2, size:2 (required per alcuni ruoli)

latitude
Optional|float|null

nullable - Latitudine

longitude
Optional|float|null

nullable - Longitudine

legalAddress
Optional|string|null

nullable - Indirizzo sede legale, max:255 (required per alcuni ruoli)

legalStreetNumber
Optional|string|null

nullable - Numero civico sede legale, max:50 (required per alcuni ruoli)

legalCity
Optional|string|null

nullable - Città sede legale, max:255 (required per alcuni ruoli)

legalProvince
Optional|string|null

nullable - Provincia sede legale, max:255 (required per alcuni ruoli)

legalZipCode
Optional|string|null

nullable - CAP sede legale (required per alcuni ruoli)

legalCountry
Optional|string|null

nullable - Paese sede legale ISO 2, size:2 (required per alcuni ruoli)

legalLatitude
Optional|float|null

nullable - Latitudine sede legale

legalLongitude
Optional|float|null

nullable - Longitudine sede legale

phonePrefix
Optional|string|null

nullable - Prefisso tel., min:1, max:20

phoneNumber
Optional|string|null

nullable - Numero tel., min:9, max:20

birthDate
Optional|string|null

nullable - Data di nascita (date format)

birthCity
Optional|string|null

nullable - Città di nascita, max:255

fiscalCode
Optional|string|null

nullable - Codice fiscale, max:16, validated with FiscalCodeRule

vatNumber
Optional|string|null

nullable - P.IVA, max:20, validated with VatNumberRule

legalRepresentativeFirstName
Optional|string|null

nullable - Nome rappresentante legale, max:255

legalRepresentativeLastName
Optional|string|null

nullable - Cognome rappresentante legale, max:255

legalRepresentativeEmail
Optional|string|null

nullable - Email rappresentante legale, max:255

legalRepresentativePhonePrefix
Optional|string|null

nullable - Prefisso tel. rapp. legale, min:1, max:20

legalRepresentativePhoneNumber
Optional|string|null

nullable - Tel. rapp. legale, min:10, max:20

legalRepresentativeBirthDate
Optional|string|null

nullable - Data nascita rapp. legale (date format)

legalRepresentativeBirthCity
Optional|string|null

nullable - Città nascita rapp. legale, max:255

legalRepresentativeFiscalCode
Optional|string|null

nullable - CF rapp. legale, max:16, validated with FiscalCodeRule

legalRepresentativeVatNumber
Optional|string|null

nullable - P.IVA rapp. legale, max:20, validated with VatNumberRule

companyName
Optional|string|null

nullable - Ragione sociale, max:255

pec
Optional|string|null

nullable - PEC, email format, max:255 (required se sdiCode vuoto per alcuni ruoli)

sdiCode
Optional|string|null

nullable - Codice SDI, min:7, max:10, validated with SdiCodeRule (required se pec vuoto per alcuni ruoli)

taxRegimeCode
Optional|string|null

nullable - Codice regime fiscale, max:255 (required per alcuni ruoli)

taxVatRate
Optional|string|null

nullable - Aliquota IVA, max:255 (required per alcuni ruoli)

taxVatNatureCode
Optional|string|null

nullable - Codice natura IVA, max:255 (required quando taxVatRate = 0)

taxPensionFundType
Optional|string|null

nullable - Tipo cassa previdenziale, max:255 (required per alcuni ruoli)

taxPensionFundRate
Optional|string|null

nullable - Aliquota cassa, max:255 (required quando taxPensionFundType valorizzato)

taxPensionFundVatRate
Optional|string|null

nullable - IVA cassa, max:255 (required quando taxPensionFundType valorizzato)

taxPensionFundVatNatureCode
Optional|string|null

nullable - Natura IVA cassa, max:255 (required quando taxPensionFundVatRate = 0)

iban
Optional|string|null

nullable - IBAN, max:34, validated with IbanRule (required per alcuni ruoli)

ibanBank
Optional|string|null

nullable - Banca IBAN, max:255

ibanBeneficiary
Optional|string|null

nullable - Beneficiario IBAN, max:255

networkCode
Optional|string|null

nullable - Codice rete, max:255

insuranceCompany
Optional|string|null

nullable - Compagnia assicurativa, max:255

insurancePolicyNumber
Optional|string|null

nullable - Numero polizza, max:255

insuranceExpiryDate
Optional|string|null

nullable - Data scadenza polizza (date format)

insuranceCoverage
Optional|string|null

nullable - Massimale polizza, max:255

professionalRegistryName
Optional|string|null

nullable - Nome albo professionale, max:255

professionalRegistryNumber
Optional|string|null

nullable - Numero iscrizione albo, max:255

professionalRegistryProvince
Optional|string|null

nullable - Provincia albo, max:255

referralCode
Optional|string|null

nullable - Codice referral, max:255

Validazioni per ruolo

I campi richiesti variano in base al ruolo selezionato. Ad esempio:

  • Ruoli interni (admin, backoffice, etc.): richiedono i campi del domicilio
  • Designer (singolo-progettista): richiedono domicilio e dati fiscali
  • Designer (studio-progettazione): richiedono sede legale e dati fiscali
  • Safety Officer: richiedono domicilio, sede legale e dati fiscali
  • Vedere AbstractUserInputDto::getRoleSpecificRules() per i dettagli completi

UpdateUserDto (Input DTO)

DTO utilizzato per l'aggiornamento di un utente esistente. La password è opzionale.

UpdateUserDto

DTO di input per l'aggiornamento di un utente esistente. Ha gli stessi campi di CreateUserDto, con la differenza che la password è opzionale.

Field
PHP Type
Note
password
string|Optional|null

optional - Password, min:8 (solo se si vuole cambiarla)

(altri campi)
...

Stessi campi di CreateUserDto - vedere CreateUserDto sopra per l'elenco completo

Password Update

In UpdateUserDto, il campo password è opzionale (sometimes validation). Viene utilizzato solo quando si desidera modificare la password dell'utente. Se non fornito, la password esistente rimane invariata.


DTOs Correlati

AssigneeTypeDto

DTO che rappresenta un tipo di incaricato/figura professionale

Field
PHP Type
Note
id
int
code
string

Codice univoco

name
string

Nome del tipo di incaricato

merchandiseCategoryId
Optional|null|int

nullable - ID categoria merceologica associata

parent
Optional|AssigneeTypeDto

nullable - Tipo di incaricato genitore (relazione gerarchica)

children
Optional|array<AssigneeTypeDto>

nullable - Tipi di incaricati figli

merchandiseCategory
Optional|null|MerchandiseCategoryDto

nullable - Categoria merceologica associata

MerchandiseCategoryDto

DTO che rappresenta una categoria merceologica

Field
PHP Type
Note
id
int
code
?string

nullable - Codice categoria

name
string

Nome della categoria

parent
Optional|MerchandiseCategoryDto

nullable - Categoria genitore (relazione gerarchica)

children
Optional|array<MerchandiseCategoryDto>

nullable - Categorie figlie

assigneeTypes
Optional|array<AssigneeTypeDto>

nullable - Tipi di incaricati associati

ProvinceDto

DTO che rappresenta una provincia italiana

Field
PHP Type
Note
id
int
name
string

Nome completo provincia

short_code
string

Codice provincia (es: 'RM', 'MI')

CountryDto

DTO che rappresenta una nazione

Field
PHP Type
Note
id
int
code
string

Codice ISO 2 (es: 'IT', 'FR')

name
string

Nome completo nazione

ReferralDto

DTO che rappresenta un referral (codice di riferimento) polimorfico. Può riferirsi a Profile (consulenti) o PartnerBranch.

Field
PHP Type
Note
id
int
referralCode
string

Codice referral univoco completo

referrableType
string

Tipo entità referral (Profile, PartnerBranch)

referrableId
int

ID entità referral

createdAt
?string

nullable - Data creazione (ISO 8601)

updatedAt
?string

nullable - Data aggiornamento (ISO 8601)

referrable

nullable - Entità referral completa (ProfileDto per consulenti, PartnerBranchDto per filiali)

Codice Referral Completo

Il referral_code è un codice completo generato automaticamente che combina:

  • Per PartnerBranch: {partner.referral_code}-{branch.referral_code}-000
  • Per Profile: {partner.referral_code}-{branch.referral_code}-{profile.referral_profile_code}

Il codice viene generato e aggiornato automaticamente dal sistema.

ManagerDto

DTO leggero che rappresenta un manager/utente (solo nome ed email)

Field
PHP Type
Note
name
string

Nome completo del manager

email
string

Email del manager


Company

CompanyDto (Entity DTO)

DTO di output che rappresenta un'azienda completa. I tipi sono sempre caricati automaticamente (eager loading).

CompanyDto

DTO di output che rappresenta un'azienda del sistema

Field
PHP Type
Note
id
int
uuid
string
types

Array di tipi azienda (es: ['company', 'supplier'])

subcontractRole

nullable - Ruolo nei subcontratti (main, subcontractor, both)

name
string

Ragione sociale

description
?string

nullable, max:2000

address
?string

nullable - Indirizzo domicilio, max:255

streetNumber
?string

nullable - Numero civico domicilio, max:50

zipCode
?string

nullable - CAP domicilio, max:20

city
?string

nullable - Città domicilio, max:255

province
?string

nullable - Provincia domicilio, max:255

country
?string

nullable - Codice paese domicilio ISO 2, size:2

latitude
?float

nullable - Latitudine domicilio

longitude
?float

nullable - Longitudine domicilio

legalAddress
string

Indirizzo sede legale, max:255

legalStreetNumber
string

Numero civico sede legale, max:50

legalCity
string

Città sede legale, max:255

legalProvince
string

Provincia sede legale, max:255

legalZipCode
string

CAP sede legale, max:20

legalCountry
string

Codice paese sede legale ISO 2, size:2

legalLatitude
?float

nullable - Latitudine sede legale

legalLongitude
?float

nullable - Longitudine sede legale

socialCapital
?string

nullable - Capitale sociale, max:255

networkCode
?string

nullable - Codice rete, max:255

cciaa
?string

nullable - CCIAA, max:255

rea
?string

nullable - REA, max:255

atecoCode
?string

nullable - Codice ATECO, max:255

referentFirstName
?string

nullable - Nome referente, max:255

referentLastName
?string

nullable - Cognome referente, max:255

referentEmail
?string

nullable - Email referente, max:255

referentPhonePrefix
?string

nullable - Prefisso tel. referente, max:255

referentPhone
?string

nullable - Telefono referente, max:255

legalRepresentativeFirstName
?string

nullable - Nome rappresentante legale, max:255

legalRepresentativeLastName
?string

nullable - Cognome rappresentante legale, max:255

legalRepresentativeEmail
?string

nullable - Email rappresentante legale, max:255

legalRepresentativePhonePrefix
?string

nullable - Prefisso tel. rappresentante legale, max:20

legalRepresentativePhoneNumber
?string

nullable - Telefono rappresentante legale, max:20

legalRepresentativeBirthDate
?string

nullable - Data di nascita rappresentante legale (YYYY-MM-DD)

legalRepresentativeBirthCity
?string

nullable - Città di nascita rappresentante legale, max:255

legalRepresentativeFiscalCode
?string

nullable - Codice fiscale rappresentante legale, max:16

legalRepresentativeVatNumber
?string

nullable - Partita IVA rappresentante legale, max:20

companyName
?string

nullable - Ragione sociale completa, max:255

fiscalCode
?string

nullable - Codice fiscale azienda, max:16

vatNumber
?string

nullable - Partita IVA azienda, max:20

pec
?string

nullable - PEC, max:255

sdiCode
?string

nullable - Codice SDI, min:7, max:10

taxRegimeCode

nullable - Regime fiscale

taxVatRate

nullable - Aliquota IVA

taxVatNatureCode

nullable - Natura IVA (obbligatorio se taxVatRate = 0)

taxPensionFundType

nullable - Tipo cassa previdenziale

taxPensionFundRate

nullable - Aliquota cassa previdenziale

taxPensionFundVatRate

nullable - IVA applicata alla cassa previdenziale

taxPensionFundVatNatureCode

nullable - Natura IVA cassa previdenziale

iban
?string

nullable - IBAN, max:34

ibanBank
?string

nullable - Nome banca IBAN, max:255

ibanBeneficiary
?string

nullable - Beneficiario IBAN, max:255

assignees
array<AssigneeTypeDto>

Assignee types per ruolo MAIN (obbligatorio se subcontractRole = MAIN o BOTH)

subAssignees
array<AssigneeTypeDto>

Assignee types per ruolo SUBCONTRACTOR (obbligatorio se subcontractRole = SUBCONTRACTOR o BOTH)

merchandiseCategories
array<MerchandiseCategoryDto>

Categorie merceologiche (obbligatorio se type include 'supplier')

provinces
array<ProvinceDto>

Province di competenza (sempre obbligatorio, min: 1)

mainManager

nullable - Manager principale associato all'azienda

createdAt
?string

nullable - Data creazione (ISO 8601)

updatedAt
?string

nullable - Data ultimo aggiornamento (ISO 8601)


CompanyInputDto (Input DTO)

DTO utilizzato per la creazione e aggiornamento di un'azienda. Supporta tipi multipli.

CompanyInputDto

DTO di input per create e update di aziende

Field
PHP Type
Note
uuid
string|Optional|null

nullable, uuid - Generato automaticamente se non fornito

types

required, min:1 - Array di tipi (almeno uno richiesto)

subcontractRole

Obbligatorio se type include 'company', nullable altrimenti

name
string

required, max:255 - Ragione sociale

description
string|Optional|null

nullable, max:2000

address
string|Optional|null

nullable, max:255 - Indirizzo domicilio (opzionale)

streetNumber
string|Optional|null

nullable, max:50 - Numero civico domicilio (opzionale)

zipCode
string|Optional|null

nullable, max:20 - CAP domicilio (opzionale)

city
string|Optional|null

nullable, max:255 - Città domicilio (opzionale)

province
string|Optional|null

nullable, max:255 - Provincia domicilio (opzionale)

country
string|Optional|null

nullable, size:2 - Codice ISO 2 domicilio (opzionale)

latitude
float|Optional|null

nullable - Latitudine domicilio

longitude
float|Optional|null

nullable - Longitudine domicilio

legalAddress
string

required, max:255 - Indirizzo sede legale

legalStreetNumber
string

required, max:50 - Numero civico sede legale

legalCity
string

required, max:255 - Città sede legale

legalProvince
string

required, max:255 - Provincia sede legale

legalZipCode
string

required, max:20 - CAP sede legale

legalCountry
string

required, size:2 - Codice ISO 2 sede legale

legalLatitude
float|Optional|null

nullable - Latitudine sede legale

legalLongitude
float|Optional|null

nullable - Longitudine sede legale

socialCapital
string|Optional|null

nullable, max:255 - Capitale sociale

networkCode
string|Optional|null

nullable, max:255 - Codice rete

cciaa
string|Optional|null

nullable, max:255 - CCIAA

rea
string|Optional|null

nullable, max:255 - REA

atecoCode
string|Optional|null

nullable, max:255 - Codice ATECO

referentFirstName
string|Optional|null

nullable, max:255 - Nome referente

referentLastName
string|Optional|null

nullable, max:255 - Cognome referente

referentEmail
string|Optional|null

nullable, email, max:255 - Email referente

referentPhonePrefix
string|Optional|null

nullable, max:255 - Prefisso tel. referente

referentPhone
string|Optional|null

nullable, max:255 - Telefono referente

legalRepresentativeFirstName
string|Optional|null

nullable, max:255 - Nome rappresentante legale

legalRepresentativeLastName
string|Optional|null

nullable, max:255 - Cognome rappresentante legale

legalRepresentativeEmail
string|Optional|null

nullable, email, max:255 - Email rappresentante legale

legalRepresentativePhonePrefix
string|Optional|null

nullable, min:1, max:20 - Prefisso tel. rappresentante legale

legalRepresentativePhoneNumber
string|Optional|null

nullable, min:10, max:20 - Telefono rappresentante legale

legalRepresentativeBirthDate
string|Optional|null

nullable, date - Data nascita rappresentante legale (YYYY-MM-DD)

legalRepresentativeBirthCity
string|Optional|null

nullable, max:255 - Città nascita rappresentante legale

legalRepresentativeFiscalCode
string|Optional|null

nullable, max:16, FiscalCodeRule - CF rappresentante legale

legalRepresentativeVatNumber
string|Optional|null

nullable, max:20, VatNumberRule - P.IVA rappresentante legale

fiscalCode
string|Optional|null

nullable, max:16, FiscalCodeRule - Codice fiscale azienda

vatNumber
string|Optional|null

nullable, max:20, VatNumberRule - Partita IVA azienda

pec
string|Optional|null

nullable, email, max:255 - PEC (required se sdiCode vuoto)

sdiCode
string|Optional|null

nullable, min:7, max:10, SdiCodeRule - Codice SDI (required se pec vuoto)

taxRegimeCode

required - Regime fiscale

taxVatRate

required - Aliquota IVA

taxVatNatureCode

nullable - Natura IVA (valorizzabile solo se taxVatRate = 0)

taxPensionFundType

required - Tipo cassa previdenziale

taxPensionFundRate

nullable - Aliquota cassa (required se taxPensionFundType != 'none')

taxPensionFundVatRate

nullable - IVA cassa (required se taxPensionFundType != 'none')

taxPensionFundVatNatureCode

nullable - Natura IVA cassa (required se taxPensionFundVatRate = 0)

iban
string

required, max:34, IbanRule - IBAN

ibanBank
string|Optional|null

nullable, max:255 - Nome banca IBAN

ibanBeneficiary
string|Optional|null

nullable, max:255 - Beneficiario IBAN

assigneeIds
array<int>|Optional

Array di ID assignee types - Obbligatorio (min:1) se subcontractRole = MAIN o BOTH

subAssigneeIds
array<int>|Optional

Array di ID assignee types - Obbligatorio (min:1) se subcontractRole = SUBCONTRACTOR o BOTH

merchandiseCategoryIds
array<int>|Optional

Array di ID categorie merceologiche - Obbligatorio (min:1) se type include 'supplier'

provinceIds
array<int>

required, array, min:1 - Array di ID province (sempre obbligatorio)

Gestione Tipi e Relazioni

Il campo types accetta un array di valori enum o stringhe.

Validazioni condizionali:

  • provinceIds: sempre richiesto (min: 1)
  • subcontractRole: richiesto se types include 'company'
  • assigneeIds: richiesto (min: 1) se subcontractRole = 'main' o 'both'
  • subAssigneeIds: richiesto (min: 1) se subcontractRole = 'subcontractor' o 'both'
  • merchandiseCategoryIds: richiesto (min: 1) se types include 'supplier'

Esempio per company tipo BOTH:

{
"types": ["company"],
"subcontractRole": "both",
"name": "Acme SpA",
"assigneeIds": [1, 2, 3],
"subAssigneeIds": [4, 5],
"provinceIds": [1, 2],
...
}

Esempio per supplier:

{
"types": ["supplier"],
"name": "Fornitore XYZ",
"merchandiseCategoryIds": [10, 11, 12],
"provinceIds": [1, 2, 3],
...
}

Partner

PartnerDto (Entity DTO)

DTO di output che rappresenta un partner del sistema (banca, CAF, CRECO, altro).

PartnerDto

DTO di output che rappresenta un partner del sistema

Field
PHP Type
Note
id
int
type

Tipo di partner (bank, caf, creco, other)

name
string

Nome del partner

referralCode
string

Codice referral univoco (3 caratteri)

report_price
?float

nullable - Prezzo per report, decimal(10,2)

ape_price
?float

nullable - Prezzo APE, decimal(10,2)

note
?string

nullable - Note

avatar

nullable - Avatar del partner

createdAt
?string

nullable - Data creazione (ISO 8601)

updatedAt
?string

nullable - Data ultimo aggiornamento (ISO 8601)

branches

nullable - Filiali principali (parent_branch_id = null)


PartnerInputDto (Input DTO)

DTO utilizzato per la creazione e aggiornamento di un partner.

PartnerInputDto

DTO di input per create e update di partner

Field
PHP Type
Note
type

required - Tipo di partner

name
string

required, max:255 - Nome del partner

referralCode
string

required, regex:/^[A-Z0-9]{3}$/i, size:3, unique - Codice referral (3 caratteri alfanumerici)

reportPrice
?float

nullable, numeric, decimal:0,2 - Prezzo per report

apePrice
?float

nullable, numeric, decimal:0,2 - Prezzo APE

note
?string

nullable - Note

avatar
UploadedFile|Optional|null

nullable - File immagine avatar, mimes:jpeg,jpg,png,gif,webp, max:5MB

deleteAvatar
bool|Optional

optional, default:false - Se true, elimina l'avatar esistente


PartnerBranchDto (Entity DTO)

DTO di output che rappresenta una filiale partner. Supporta struttura gerarchica ricorsiva.

PartnerBranchDto

DTO di output che rappresenta una filiale partner con supporto ricorsivo

Field
PHP Type
Note
id
int
partnerId
int

FK to partners.id

parentBranchId
?int

nullable - FK to partner_branches.id (filiale genitore)

name
string

Nome della filiale

cciaa
?string

nullable - CCIAA

workingTimes
?string

nullable - Orari di lavoro

fullAddress
?string

nullable - Indirizzo completo calcolato

address
?string

nullable - Indirizzo, max:255

streetNumber
?string

nullable - Numero civico, max:255

city
?string

nullable - Città, max:255

province
?string

nullable - Provincia (codice), size:2

zipCode
?string

nullable - CAP, max:10

country
?string

nullable - Paese (codice ISO 2), size:2

latitude
?float

nullable - Latitudine

longitude
?float

nullable - Longitudine

fiscalCode
?string

nullable - Codice fiscale, max:16

vatNumber
?string

nullable - Partita IVA, max:11

pec
?string

nullable - PEC, email, max:255

sdiCode
?string

nullable - Codice SDI, max:7

taxRegimeCode

nullable - Regime fiscale

taxVatRate

nullable - Aliquota IVA

taxVatNatureCode

nullable - Natura IVA

taxPensionFundType

nullable - Tipo cassa previdenziale

taxPensionFundRate

nullable - Aliquota cassa previdenziale

taxPensionFundVatRate

nullable - IVA applicata alla cassa

taxPensionFundVatNatureCode

nullable - Natura IVA cassa

iban
?string

nullable - IBAN, max:34

ibanBank
?string

nullable - Nome banca, max:255

ibanBeneficiary
?string

nullable - Beneficiario, max:255

networkCode
?string

nullable - Codice rete, max:255

createdAt
?string

nullable - Data creazione (ISO 8601)

updatedAt
?string

nullable - Data ultimo aggiornamento (ISO 8601)

partner

nullable - Partner associato

parentBranch

nullable - Filiale genitore

referralBranchCode
?string

nullable - Codice referral della filiale (4 caratteri)

referral

nullable - Referral completo associato alla filiale

children

nullable - Sotto-filiali ricorsive

mainManager

nullable - Manager principale della filiale

Struttura Ricorsiva

Il campo children contiene le sotto-filiali in modo ricorsivo. Ogni sotto-filiale può a sua volta avere dei children, permettendo di rappresentare una gerarchia completa di filiali.


PartnerBranchInputDto (Input DTO)

DTO utilizzato per la creazione e aggiornamento di una filiale partner.

PartnerBranchInputDto

DTO di input per create e update di filiali partner

Field
PHP Type
Note
partnerId
int

required, exists:partners,id - ID del partner

parentBranchId
?int

nullable, exists:partner_branches,id - ID filiale genitore

name
string

required, max:255 - Nome della filiale

referralCode
string

required, regex:/^[A-Z0-9]{4}$/i, size:4 - Codice referral (4 caratteri alfanumerici)

cciaa
?string

nullable, max:255 - CCIAA

workingTimes
?string

nullable, max:255 - Orari di lavoro

address
?string

nullable, max:255 - Indirizzo

streetNumber
?string

nullable, max:255 - Numero civico

city
?string

nullable, max:255 - Città

province
?string

nullable, size:2 - Provincia (codice)

zipCode
?string

nullable, max:10 - CAP

country
?string

nullable, size:2 - Paese (codice ISO 2)

latitude
?float

nullable, between:-90,90 - Latitudine

longitude
?float

nullable, between:-180,180 - Longitudine

fiscalCode
?string

nullable, max:16 - Codice fiscale

vatNumber
?string

nullable, max:11 - Partita IVA

pec
?string

nullable, email, max:255 - PEC

sdiCode
?string

nullable, max:7 - Codice SDI

taxRegimeCode

required - Regime fiscale

taxVatRate

required - Aliquota IVA

taxVatNatureCode

nullable - Natura IVA

taxPensionFundType

required - Tipo cassa previdenziale

taxPensionFundRate

nullable - Aliquota cassa previdenziale

taxPensionFundVatRate

nullable - IVA applicata alla cassa

taxPensionFundVatNatureCode

nullable - Natura IVA cassa

iban
?string

nullable, max:34 - IBAN

ibanBank
?string

nullable, max:255 - Nome banca

ibanBeneficiary
?string

nullable, max:255 - Beneficiario

networkCode
?string

nullable, max:255 - Codice rete


Gestione Permessi

PermissionInputDto

Field
PHP Type
Note
title
string

required, max:255

description
string

required, max:1000

RoleDto

Field
PHP Type
Note
id
int
name
string

Spatie role name

guardName
string

Guard name for role

belonging

nullable, user belonging type for this role

title
?string

nullable, human readable role title

isProtected
bool

Whether role is system protected

RolePermissionUpdateDto

Field
PHP Type
Note
permission
string

required, permission name

value
bool

required, true to grant, false to revoke

role_id
int

required, FK to roles.id

RolePermissionsUpdateRequestDto

Field
PHP Type
Note
updates

required, array of permission updates

RolePermissionsUpdateResponseDto

Field
PHP Type
Note
success_count
int

Number of successful updates

error_count
int

Number of failed updates

errors
array<string>

Array of error messages

total_processed
int

Total number of updates processed

RolePermissionsMappingActionDto

Field
PHP Type
Note
id
int

Permission ID

name
string

Permission system name

title
?string

nullable, permission display title for UI

action
string

Permission action identifier (e.g., 'view', 'create')

description
?string

nullable, permission description

order
?int

nullable, display order for sorting

authorized_role_ids
array<int>

Array of role IDs that have this permission

RolePermissionsMappingResourceDto

Field
PHP Type
Note
name
string

Resource name (e.g., 'users', 'companies')

title
?string

nullable, resource display title for UI

permissions

Array of permissions for this resource

RolePermissionsMappingModuleDto

Field
PHP Type
Note
module_name
string

Human readable module name

module_key
string

Module identifier key

resources

Array of resources in this module

RolePermissionsMappingDto

Field
PHP Type
Note
roles

Array of all available roles

permissions

Array of modules with their permissions structure

modules
array<ModuleConfigDto>

Array of module configuration objects


Tipi di assegnatari e categorie merceologiche

AssigneeTypeDto

Field
PHP Type
Note
id
int
code
string
name
string
revenuePercentage
float
merchandiseCategory

MerchandiseCategoryDto

Field
PHP Type
Note
id
int
name
string
assigneeTypes

Company Subcontracts

CompanySubcontractDto (Entity DTO)

DTO di output che rappresenta un subcontratto tra due aziende.

CompanySubcontractDto

DTO di output che rappresenta un subcontratto aziendale

Field
PHP Type
Note
id
int

ID del subcontratto

companyId
int

ID dell'azienda che offre il subcontratto

subcontractorCompanyId
int

ID dell'azienda subappaltatrice

status

Status del subcontratto (pending, accepted, rejected)

company

nullable - Dettagli dell'azienda principale

subcontractor

nullable - Dettagli dell'azienda subappaltatrice

createdAt
?string

nullable - Data creazione (ISO 8601)

updatedAt
?string

nullable - Data ultimo aggiornamento (ISO 8601)

statusChangedAt
?string

nullable - Data ultimo cambio status (ISO 8601)


CompanySubcontractCreateDto (Input DTO)

DTO utilizzato per creare uno o più subcontratti.

CompanySubcontractCreateDto

DTO di input per creare subcontratti

Field
PHP Type
Note
subcontractorCompanyIds
array<int>

required, array, min:1 - Array di ID aziende subappaltatrici. Ogni ID deve: esistere nella tabella companies, avere tipo 'company', essere diverso dall'azienda principale

Validazioni
  • Ogni azienda subappaltatrice deve essere di tipo company
  • Non è possibile auto-riferimento (company_id ≠ subcontractor_company_id)
  • È possibile specificare più aziende in un'unica richiesta

CompanySubcontractUpdateStatusDto (Input DTO)

DTO utilizzato per aggiornare lo status di un subcontratto.

CompanySubcontractUpdateStatusDto

DTO di input per aggiornare lo status di un subcontratto

Field
PHP Type
Note
status

required - Nuovo status (accepted o rejected)

Aggiornamento Status
  • È possibile cambiare lo status solo a accepted o rejected
  • Quando lo status cambia, il campo statusChangedAt viene aggiornato automaticamente
  • Non è possibile tornare a pending dopo aver accettato o rifiutato

🎛️ Enums

Enums Company

CompanyTypeEnum

string

Tipi di azienda disponibili nel sistema. Un'azienda può avere uno o più tipi contemporaneamente.

Field
Value
Frontend Value
Note
COMPANY
company
Impresa
Impresa edile o generale
SUPPLIER
supplier
Fornitore
Fornitore di beni o servizi
DESIGNER
designer
Progettista
Studio di progettazione o progettista
Tipi Multipli

Un'azienda può avere più tipi contemporaneamente. Ad esempio, un'azienda può essere sia "company" che "supplier".

SubcontractRoleEnum

string

Ruolo dell'azienda nella gestione dei subcontratti. Indica se l'azienda opera come appaltatore principale, subappaltatore o entrambi.

Field
Value
Frontend Value
Note
MAIN
main
Azienda Principale
L'azienda agisce come appaltatore principale
SUBCONTRACTOR
subcontractor
Subappaltatore
L'azienda agisce come subappaltatore
BOTH
both
Principale e Subappaltatore
L'azienda può operare in entrambi i ruoli
Validazione Condizionale

Il campo subcontractRole è obbligatorio quando il tipo dell'azienda include company. Per altri tipi (supplier, designer) è opzionale.

AssigneeRoleEnum

string

Ruolo specifico degli assignee types all'interno di una company. Utilizzato nella tabella pivot company_has_assignee_types per distinguere tra assignee per il ruolo principale e per il subappalto.

Field
Value
Frontend Value
Note
MAIN
main
Appaltatore Principale
Assignee types quando l'azienda opera come appaltatore principale
SUBCONTRACTOR
subcontractor
Subappaltatore
Assignee types quando l'azienda opera come subappaltatore
Distinzione Ruoli

Una company con subcontractRole = BOTH può avere set diversi di assignee types:

  • assignees (role = MAIN): assignee types quando opera come appaltatore principale
  • subAssignees (role = SUBCONTRACTOR): assignee types quando opera come subappaltatore

Esempio pratico:

{
"subcontractRole": "both",
"assigneeIds": [1, 2, 3], // Quando è MAIN
"subAssigneeIds": [3, 4, 5] // Quando è SUBCONTRACTOR
}

Subcontratti

SubcontractStatusEnum

string

Status possibili di un subcontratto tra due aziende. Riflette lo stato della richiesta di subappalto.

Field
Value
Frontend Value
Note
PENDING
pending
In attesa
Il subcontratto è stato creato ma non ancora confermato o rifiutato
ACCEPTED
accepted
Accettato
Il subcontratto è stato accettato dall'azienda subappaltatrice
REJECTED
rejected
Rifiutato
Il subcontratto è stato rifiutato dall'azienda subappaltatrice
Gestione Status
  • Un subcontratto inizia sempre con status pending
  • Può essere aggiornato solo a accepted o rejected (non si può tornare a pending)
  • Il campo statusChangedAt viene popolato automaticamente quando lo status cambia

Enums Utente

BelongingEnum

string
Field
Value
Frontend Value
Note
INTERNAL
internal
Interno
EXTERNAL
external
Esterno
COMPANY
company
Impresa
SUPPLIER
supplier
Fornitore
PARTNER
partner
Partner
PROJECT_REFERENT
project_referent
Referente Progetto

Enums Partner

PartnerTypeEnum

string

Tipi di partner disponibili nel sistema. Ogni partner ha un solo tipo.

Field
Value
Frontend Value
Note
BANK
bank
Banca
Istituto bancario
CAF
caf
CAF
Centro di Assistenza Fiscale
CRECO
creco
CRECO
Centro Recupero Crediti
OTHER
other
Altro
Altro tipo di partner

Enums Fiscali

Enum utilizzati per i dati fiscali degli utenti professionisti.

TaxRegimeEnum

string

Regimi fiscali italiani per fatturazione elettronica (codici ufficiali SDI)

Field
Value
Frontend Value
Note
RF01
RF01
Ordinario
RF02
RF02
Contribuenti minimi
art.1, commi 96-117, legge n. 244/007
RF04
RF04
Agricoltura e attività connesse e pesca
articoli 34 e 34-bis, D.P.R. n. 633/1972
RF05
RF05
Vendita sali e tabacchi
art. 74, comma 1, D.P.R. n. 633/1972
RF06
RF06
Commercio dei fiammiferi
art. 74, comma 1, D.P.R. n. 633/1972
RF07
RF07
Editoria
art. 74, comma 1, D.P.R. n. 633/1972
RF08
RF08
Gestione di servizi di telefonia pubblica
art. 74, comma 1, D.P.R. n. 633/1972
RF09
RF09
Rivendita di documenti di trasporto pubblico e di sosta
art. 74, comma 1, D.P.R. n.633/1972
RF10
RF10
Intrattenimenti, giochi e altre attività
art.74, comma 6, D.P.R. n. 633/1972
RF11
RF11
Agenzie di viaggi e turismo
art. 74-ter, D.P.R. n. 633/1972
RF12
RF12
Agriturismo
art. 5, comma 2, legge n. 413/1991
RF13
RF13
Vendite a domicilio
art. 25-bis, comma 6, D.P.R. n. 600/1973
RF14
RF14
Rivendita di beni usati, oggetti d'arte, antiquariato
art. 36, D.L.n.41/1995
RF15
RF15
Agenzie di vendite all'asta
art. 40-bis, D.L.n.41/1995
RF16
RF16
IVA per cassa P.A.
art. 6, comma 5, D.P.R. n. 633/1972
RF17
RF17
IVA per cassa
art. 32-bis, D.L. n. 83/2012
RF18
RF18
Altro
RF19
RF19
Forfettario
art.1, commi 54-89, legge n. 190/2014

VatRateEnum

string

Aliquote IVA disponibili per professionisti italiani

Field
Value
Frontend Value
Note
VAT_22
22
22%
VAT_10
10
10%
VAT_5
5
5%
VAT_4
4
4%
VAT_0
0
0% (Esente)
Richiede VatNatureCode

VatNatureEnum

string

Codici natura IVA (da usare quando aliquota IVA è 0% o esente). Basato sui codici FatturaPA ufficiali.

Field
Value
Frontend Value
Note
N1
N1
N1 - Esclusa ex art. 15 del DPR 633/72
N2_1
N2.1
N2.1 - Non soggette a IVA ai sensi degli artt. da 7 a 7-septies
N2_2
N2.2
N2.2 - Non soggette - altri casi
N3_1
N3.1
N3.1 - Non imponibili - esportazioni
N3_2
N3.2
N3.2 - Non imponibili - cessioni intracomunitarie
N3_3
N3.3
N3.3 - Non imponibili - cessioni verso San Marino
N3_4
N3.4
N3.4 - Non imponibili - operazioni assimilate alle cessioni all'esportazione
N3_5
N3.5
N3.5 - Non imponibili - a seguito di dichiarazioni d'intento
N3_6
N3.6
N3.6 - Non imponibili - altre operazioni che non concorrono al plafond
N4
N4
N4 - Esenti
N5
N5
N5 - Regime del margine / IVA non esposta
N6_1
N6.1
N6.1 - Inversione contabile - cessione di rottami
N6_2
N6.2
N6.2 - Inversione contabile - cessione oro/argento
N6_3
N6.3
N6.3 - Inversione contabile - subappalto edile
N6_4
N6.4
N6.4 - Inversione contabile - cessione fabbricati
N6_5
N6.5
N6.5 - Inversione contabile - cessione telefoni cellulari
N6_6
N6.6
N6.6 - Inversione contabile - prodotti elettronici
N6_7
N6.7
N6.7 - Inversione contabile - prestazioni edilizia
N6_8
N6.8
N6.8 - Inversione contabile - settore energetico
N6_9
N6.9
N6.9 - Inversione contabile - altri casi
N7
N7
N7 - IVA assolta in altro stato UE
Telecomunicazioni, teleradiodiffusione ed elettronici

PensionFundTypeEnum

string

Tipi di cassa previdenziale italiana per professionisti. Basato sui codici ufficiali SDI (TC01-TC22).

Field
Value
Frontend Value
Note
NONE
none
Nessuna cassa previdenziale
CNPAF
CNPAF
Cassa nazionale previdenza e assistenza avvocati
SDI: TC01
CPDC
CPDC
Cassa previdenza dottori commercialisti
SDI: TC02
CPAG
CPAG
Cassa previdenza e assistenza geometri
SDI: TC03
CNPAIALP
CNPAIALP
Cassa nazionale previdenza ingegneri e architetti
SDI: TC04
CNN
CNN
Cassa nazionale del notariato
SDI: TC05
CNPARPC
CNPARPC
Cassa nazionale previdenza ragionieri e periti commerciali
SDI: TC06
ENASARCO
ENASARCO
Ente nazionale assistenza agenti e rappresentanti
SDI: TC07
ENPACL
ENPACL
Ente nazionale previdenza consulenti del lavoro
SDI: TC08
ENPAM
ENPAM
Ente nazionale previdenza medici
SDI: TC09
ENPAF
ENPAF
Ente nazionale previdenza farmacisti
SDI: TC10
ENPAV
ENPAV
Ente nazionale previdenza veterinari
SDI: TC11
ENPAIA
ENPAIA
Ente nazionale previdenza impiegati agricoltura
SDI: TC12
FPIISAM
FPIISAM
Fondo previdenza impiegati spedizioni marittime
SDI: TC13
INPGI
INPGI
Istituto nazionale previdenza giornalisti
SDI: TC14
ONAOSI
ONAOSI
Opera nazionale assistenza orfani sanitari
SDI: TC15
CASAGIT
CASAGIT
Cassa assistenza giornalisti
SDI: TC16
EPPI
EPPI
Ente previdenza periti industriali
SDI: TC17
EPAP
EPAP
Ente previdenza e assistenza pluricategoriale
SDI: TC18
ENPAB
ENPAB
Ente nazionale previdenza biologi
SDI: TC19
ENPAPI
ENPAPI
Ente nazionale previdenza professione infermieristica
SDI: TC20
ENPAP
ENPAP
Ente nazionale previdenza psicologi
SDI: TC21
INPS
INPS
INPS
SDI: TC22