This page lists the fields, routes, and rules of the addresses sub-module in src/cluster_erp/modules/parties/addresses/. An address belongs to one party and one country, and it is built from components that point at the country's address levels and their values. The levels and values themselves are reference data, described on settings and reference data.
Scope and source¶
- Defined in:
src/cluster_erp/modules/parties/addresses/models.py(Address,AddressComponent),schemas.py(AddressType,AddressCreate,AddressUpdate),services.py(AddressService),routes.py; metadataADDRESS_METAinsrc/cluster_erp/modules/parties/parties/metadata.py:1181. - Count: 2 tables; 7 routes (
@router.decorators inroutes.py); 7 address types (members ofAddressType).
Address fields¶
| Name | Type | Default | Meaning | Source |
|---|---|---|---|---|
code |
String(20), unique |
from sequence address |
Business key | src/cluster_erp/modules/parties/addresses/models.py:19, src/cluster_erp/modules/parties/addresses/services.py:57 |
party_id |
FK to parties_parties.id |
none | Owning party | src/cluster_erp/modules/parties/addresses/models.py:20-22 |
country_id |
FK to parties_countries.id |
none | Country of the address | src/cluster_erp/modules/parties/addresses/models.py:23-27 |
address_type |
String(30) |
none | One of billing, shipping, headquarters, branch, home, work, other |
src/cluster_erp/modules/parties/addresses/models.py:28, src/cluster_erp/modules/parties/addresses/schemas.py:10-17 |
label |
String(100) |
none | Short name of the address | src/cluster_erp/modules/parties/addresses/models.py:29 |
street_line_1, street_line_2 |
String(500) |
none | Street lines | src/cluster_erp/modules/parties/addresses/models.py:30-31 |
postal_code |
String(20) |
none | Postal code | src/cluster_erp/modules/parties/addresses/models.py:32 |
full_text |
Text |
computed | One-line text built by the service | src/cluster_erp/modules/parties/addresses/models.py:33, src/cluster_erp/modules/parties/addresses/services.py:194-208 |
is_primary |
bool | False |
Primary address of the party | src/cluster_erp/modules/parties/addresses/models.py:34 |
is_active |
bool | True |
Active flag | src/cluster_erp/modules/parties/addresses/models.py:35 |
Address components¶
| Name | Type | Meaning | Source |
|---|---|---|---|
address_id |
FK to parties_addresses.id |
The address | src/cluster_erp/modules/parties/addresses/models.py:47-51 |
address_level_id |
FK to parties_address_levels.id |
The level, for example a province | src/cluster_erp/modules/parties/addresses/models.py:52-56 |
level_value_id |
FK to parties_address_level_values.id |
The chosen value at that level | src/cluster_erp/modules/parties/addresses/models.py:57-61 |
Routes¶
All paths are under /api/v1/parties.
| Method and path | Purpose | Permission | Source |
|---|---|---|---|
GET /addresses/all |
Page of addresses across parties; filters search, party_id, address_type |
address.read |
src/cluster_erp/modules/parties/addresses/routes.py:29-89 |
GET /{party_id}/addresses |
Addresses of one party | address.read |
src/cluster_erp/modules/parties/addresses/routes.py:92-101 |
POST /{party_id}/addresses |
Create | address.create |
src/cluster_erp/modules/parties/addresses/routes.py:104-116 |
GET /addresses/{address_id} |
One address | address.read |
src/cluster_erp/modules/parties/addresses/routes.py:119-129 |
PUT /addresses/{address_id} |
Update | address.update |
src/cluster_erp/modules/parties/addresses/routes.py:132-143 |
POST /addresses/bulk-delete |
Soft-delete several | address.bulk_delete |
src/cluster_erp/modules/parties/addresses/routes.py:146-154 |
DELETE /addresses/{address_id} |
Soft-delete one | address.delete |
src/cluster_erp/modules/parties/addresses/routes.py:157-165 |
The party_id and address_type filters of GET /addresses/all serve the dependent delivery-address picker of other forms: a selected party shows only its addresses of one type (src/cluster_erp/modules/parties/addresses/services.py:156-161).
Constraints and validation¶
- Setting
is_primaryon create or update clears the flag on the party's other live addresses (src/cluster_erp/modules/parties/addresses/services.py:54-55,src/cluster_erp/modules/parties/addresses/services.py:92-93,src/cluster_erp/modules/parties/addresses/services.py:184-192). - An update that sends
componentssoft-deletes the old components and inserts the new ones (src/cluster_erp/modules/parties/addresses/services.py:100-111). full_textjoins the component values (sorted byaddress_level_id), the street lines, and the postal code with commas, and is rebuilt after every create and update (src/cluster_erp/modules/parties/addresses/services.py:82,src/cluster_erp/modules/parties/addresses/services.py:114,src/cluster_erp/modules/parties/addresses/services.py:194-208).- The cross-party list excludes addresses of deleted parties (
src/cluster_erp/modules/parties/addresses/services.py:142-154). - Other modules read addresses through
GetAddressByIdandGetPartyPrimaryAddress. The second returns the primary address of the requested type, else any primary address, else the oldest live one (src/cluster_erp/modules/parties/module.py:227-269).
Terms introduced¶
| Term | Code identifier | Definition | Turkish term | Source |
|---|---|---|---|---|
| address component | AddressComponent |
One level value of an address, for example its province or district. | Adres bileşeni | src/cluster_erp/modules/parties/addresses/models.py:44 |
| primary address | is_primary |
The single address a party marks as its main one. | Birincil adres | src/cluster_erp/modules/parties/addresses/models.py:34 |
Related pages¶
Verified against commit 92f8051 on 2026-11-13.