cevheri commited on
Commit
fe1381b
·
1 Parent(s): fa164ac

docs: update README and dpc_restapi_summary with new metadata and remove outdated sections

Browse files
.github/workflows/hf-sync.yaml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Hugging Face Space Sync
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ sync-to-hub:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ with:
14
+ fetch-depth: 0
15
+ lfs: true
16
+
17
+ - name: Push to HF Space
18
+ env:
19
+ HF_TOKEN: ${{ secrets.HF_TOKEN }}
20
+ HF_ORGANIZATION: ${{ vars.HF_ORGANIZATION }}
21
+ HF_SPACE: ${{ vars.HF_SPACE }}
22
+ run: |
23
+ git config --global user.email "actions@github.com"
24
+ git config --global user.name "GitHub Actions"
25
+ git remote add hf "https://api:$HF_TOKEN@huggingface.co/spaces/$HF_ORGANIZATION/$HF_SPACE"
26
+ git fetch hf
27
+ git checkout main
28
+ git push hf main --force
Dockerfile ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
2
+
3
+ RUN useradd -m -u 1000 chameleon
4
+
5
+ USER chameleon
6
+
7
+ # Enable bytecode compilation
8
+ ENV UV_COMPILE_BYTECODE=1
9
+
10
+ ENV PATH="/home/chameleon/.local/bin:$PATH"
11
+
12
+ WORKDIR /app
13
+
14
+ COPY --chown=chameleon pyproject.toml uv.lock ./
15
+
16
+ RUN uv sync --no-dev
17
+
18
+ COPY --chown=chameleon . /app
19
+
20
+ # Reset the entrypoint, don't invoke `uv`
21
+ ENTRYPOINT []
22
+
23
+ ENV PORT=8000
24
+ ENV FASTMCP_SERVER_HOST=0.0.0.0
25
+ ENV FASTMCP_SERVER_PORT=8000
26
+ ENV FASTMCP_SERVER_DEBUG=false
27
+
28
+ # Expose the port
29
+ EXPOSE 8000
30
+
31
+ # Start command
32
+ CMD ["uv", "run", "app.py"]
README.md CHANGED
@@ -1,3 +1,13 @@
 
 
 
 
 
 
 
 
 
 
1
  # DPC MCP Client
2
  **Desinged to test the DNext Product Catalog REST API MCP Server.**
3
 
 
1
+ ---
2
+ title: DpcMcpClient
3
+ emoji: 🤯
4
+ colorFrom: pink
5
+ colorTo: yellow
6
+ sdk: docker
7
+ pinned: false
8
+ short_description: MCP-Client Test for DNext Product Catalog MCPServer
9
+ ---
10
+
11
  # DPC MCP Client
12
  **Desinged to test the DNext Product Catalog REST API MCP Server.**
13
 
resources/dpc_restapi_summary.txt CHANGED
@@ -1,34 +1,10 @@
1
  ====================================================
2
- **API_DESCRIPTION_BEGIN** section is provided below.
3
 
4
  **Description:** Dnext Product Catalog API, which is compliant with the TMF620 Product Catalog Management standard.
5
  This API allows users to manage key catalog elements such as product offerings, specifications, characteristics, and pricing.
6
  It meets TMF620 minimum requirements while incorporating Dnext-specific fields or validations.
7
 
8
- **API Base URL:**
9
- `https://learning.test.orbitant.dev/api/productCatalogManagement/v4`
10
-
11
- **Allowed Constant Enum Values**: Use these valid values for specific fields when constructing tool inputs.
12
- * **General Constant Enum Values:**
13
- - lifecycleStatus: "In study", "In design", "In test", "Active", "Launched", "Retired", "Obsolete", "Rejected", "None"
14
- - valueType: "string", "number", "date", "true/false", "integer", "time", "macAddress"
15
- - unitOfMeasure: "Second", "Minute", "Hour", "Day", "Week", "Month", "Year", "M", "Mm", "Cm", "Km", "Kg", "Pound", "Bps", "Mbps", "Gbps", "Question", "Byte", "Mb", "Gb", "Tb", "None", "Address", "Color", "Duration", "Joule", "Number", "Phone Number", "Size", "Currency"
16
- - characteristicType: "Simple Value", "Range", "Choice"
17
- - rangeInterval: "Open", "Closed", "Closed Bottom", "Closed Top"
18
- - relationshipType: "aggregation", "migration", "substitution", "dependency", "exclusivity"
19
-
20
- * **ProductSpecification Constant Enum Values:**
21
- - operationType: "add", "delete", "modify", "modify.Migration", "modify.Relocation", "modify.Takeover", "statusChange", "statusChange.Resume", "statusChange.Suspend"
22
- - relation: "reliesOn", "uses"
23
-
24
- * **ProductOffering Constant Enum Values:**
25
- - operationType: same as ProductSpecification
26
- - relation: "reliesOn"
27
-
28
- * **ProductOfferingPrice Constant Enum Values:**
29
- - priceType: "One time charge", "Data tariff charge", "Simple usage charge", "Recurring charge", "Per line charge", "Parametric charge", "Per contract charge", "Voice tariff charge", "Simple usage discount", "Recurring discount", "Voice tariff discount", "One time discount", "One time allowance", "Recurring allowance", "Weekend allowance", "Weekend voice allowance", "Weekend data allowance", "Data commitment", "Threshold commitment", "Usage commitment", "Penalty", "Deposit", "Cost", "Upfront payment"
30
- - Money.unit: "ALL", "AUD", "CHF", "GBP", "EUR", "USD", "JPY", "CAD", "CNY", "HKD", "NZD", "TRY"
31
-
32
  **Core API Entities and Their Attributes:**
33
  **1. ProductCatalog**
34
  * **Description:** The central organizing entity for product-related data. It groups `ProductOffering`s and `Category` objects.
@@ -39,10 +15,8 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
39
  * `description` (string): Optional. Description of this catalog.
40
  * `lifecycleStatus` (string): Optional. Used to indicate the current lifecycle status (e.g., "Active", "Retired", "Draft").
41
  * `version` (string): Optional. Version of the catalog.
42
- * `validFor` (`TimePeriod` object): Optional. The period for which the catalog is valid.
43
  * `category` (array of `CategoryRef`): Optional. List of root categories contained in this catalog.
44
- * `relatedParty` (array of `RelatedParty`): Optional. List of parties involved in this catalog.
45
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes for extension.
46
 
47
  **2. Category**
48
  * **Description:** Used for logically grouping product offerings. Categories can have a hierarchical structure (sub-categories).
@@ -54,12 +28,10 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
54
  * `isRoot` (boolean): Optional. Indicates if this is a root category (default: `false`).
55
  * `lifecycleStatus` (string): Optional. Used to indicate the current lifecycle status.
56
  * `version` (string): Optional. Version of the category.
57
- * `validFor` (`TimePeriod` object): Optional. The period for which the category is valid.
58
  * `parent` (`CategoryRef` object): Optional. Reference to the parent category if this is a sub-category.
59
  * `productCatalog` (array of `ProductCatalogRef`): Optional. References to the catalogs this category belongs to.
60
  * `productOffering` (array of `ProductOfferingRef`): Optional. References to product offerings associated with this category.
61
- * `relatedParty` (array of `RelatedParty`): Optional. Parties involved in this category.
62
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes.
63
 
64
  **3. ProductCharacteristic**
65
  * **Description:** Represents a characteristic (attribute) of a product or product specification.
@@ -75,9 +47,7 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
75
  * `maxCardinality` (integer): Optional. Max instances.
76
  * `minCardinality` (integer): Optional. Min instances.
77
  * `regex` (string): Optional. Regex to validate the value.
78
- * `validFor` (`TimePeriod` object): Optional. Period of validity.
79
  * `productCharValue` (array of `ProductCharacteristicValue`): Optional. List of possible values.
80
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes.
81
 
82
  **4. ProductSpecification**
83
  * **Description:** Defines the technical details and attributes of a product or service.
@@ -92,15 +62,12 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
92
  * `name` (string): Optional. Name of the specification.
93
  * `productNumber` (string): Optional. Product number.
94
  * `version` (string): Optional. Version.
95
- * `validFor` (`TimePeriod` object): Optional. Period of validity.
96
  * `productSpecCharacteristic` (array of `ProductCharacteristic`): Optional. List of characteristics for this specification.
97
  * `serviceSpecification` (array of `ServiceSpecificationRef`): Optional. References to related service specifications.
98
  * `resourceSpecification` (array of `ResourceSpecificationRef`): Optional. References to related resource specifications.
99
  * `productSpecificationRelationship` (array of `ProductSpecificationRelationship`): Optional. Relationships with other specs.
100
- * `attachment` (array of `AttachmentRefOrValue`): Optional. Related attachments.
101
- * `relatedParty` (array of `RelatedParty`): Optional. Involved parties.
102
  * `targetProductSchema` (`TargetProductSchema` object): Optional. Schema reference.
103
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes.
104
 
105
  **5. ProductOfferingPrice**
106
  * **Description:** Details the pricing information for a `ProductOffering`.
@@ -110,7 +77,6 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
110
  * `name` (string): **Mandatory**. Name of the price (e.g., "Monthly Fee", "One-Time Setup").
111
  * `description` (string): Optional. Description of the price.
112
  * `priceType` (string): **Mandatory**. Type of price (e.g., "recurring", "one time", "usage").
113
- * `validFor` (`TimePeriod` object): Optional. Period of validity for the price.
114
  * `price` (`Money` object): **Mandatory**. The monetary value.
115
  * `price.value` (number): **Mandatory**. Numeric price value.
116
  * `price.unit` (string): **Mandatory**. Currency unit (e.g., "USD", "TRY").
@@ -125,8 +91,6 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
125
  * `productOfferingPriceRelationship` (array of `ProductOfferingPriceRelationship`): Optional. Relationships with other prices.
126
  * `popRelationship` (array of `ProductOfferingPriceRelationship`): Optional. Alias for `productOfferingPriceRelationship`.
127
  * `constraint` (array of `ConstraintRef`): Optional. Constraints.
128
- * `pricingLogicAlgorithm` (array of `PricingLogicAlgorithmRef`): Optional. Pricing algorithms.
129
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes.
130
 
131
  **6. ProductOffering**
132
  * **Description:** Represents a product or service offered to customers, linking specifications, pricing, and catalog organization.
@@ -140,192 +104,23 @@ It meets TMF620 minimum requirements while incorporating Dnext-specific fields o
140
  * `isBundle` (boolean): Optional. True if a bundle (default: false).
141
  * `isSellable` (boolean): Optional. True if sellable.
142
  * `version` (string): Optional. Version.
143
- * `validFor` (`TimePeriod` object): Optional. Period of validity.
144
  * `category` (array of `CategoryRef`): References to categories this offering belongs to.
145
  * `productSpecification` (`ProductSpecificationRef` object): **Mandatory**. Reference to the underlying product specification.
146
  * `productOfferingPrice` (array of `ProductOfferingPriceRef`): Optional. References to associated prices.
147
  * `channel` (array of `ChannelRef`): Optional. Channels.
148
  * `place` (array of `PlaceRef`): Optional. Places.
149
- * `agreement` (array of `AgreementRef`): Optional. Agreements.
150
  * `bundledProductOffering` (array of `BundledProductOffering`): Optional. If `isBundle` is true, lists contained offerings.
151
  * `resourceCandidate` (`ResourceCandidateRef` object): Optional. Resource candidate.
152
  * `serviceCandidate` (`ServiceCandidateRef` object): Optional. Service candidate.
153
  * `prodSpecCharValueUse` (array of `ProdSpecCharValueUse`): Optional. Defines char usage.
154
- * `attachment` (array of `AttachmentRefOrValue`): Optional. Attachments.
155
- * `relatedParty` (array of `RelatedParty`): Optional. Involved parties.
156
- * `@baseType`, `@schemaLocation`, `@type`: Optional meta-attributes.
157
 
 
158
  **Common Referenced Objects:**
159
- * **`TimePeriod`:** `{ "startDateTime": "string (date-time)", "endDateTime": "string (date-time)" }`
160
  * **`Money`:** `{ "value": "number", "unit": "string" }`
161
  * **`Quantity`:** `{ "amount": "number", "unit": "string" }`
162
  * **Reference Objects (`ProductCatalogRef`, `CategoryRef`, `ProductSpecificationRef`, `ProductOfferingPriceRef`, etc.):**
163
  * Typically contain `id` (string), `href` (string), `name` (string), and `@referredType` (string).
164
  * Example: `{"id": "some-id", "href": "path/to/resource/some-id", "name": "Resource Name", "@referredType": "ProductCatalog"}`
165
- * **`RelatedParty`:** `{ "id": "string", "href": "string", "name": "string", "role": "string", ...}`
166
-
167
- **Creating an Offer Process Documentation (Sequential Steps with Payloads):**
168
- To create a complete product offer in the system, you need to follow these sequential steps, making a POST request for each. Note that the IDs generated in previous steps are often used as references in subsequent steps.
169
-
170
- **Step 1: Create a Product Characteristic**
171
- * **Description:** Defines a unique attribute of a product, like speed or storage.
172
- * **Request URL:** `POST https://learning.test.orbitant.dev/api/productCatalogManagement/v4/productCharacteristic`
173
- * **Example Payload:**
174
- ```json
175
- {
176
- "characteristicType": "Simple Value",
177
- "configurable": false,
178
- "extensible": false,
179
- "isUnique": false,
180
- "isVisible": false,
181
- "isModifiable": false,
182
- "mandatory": false,
183
- "minCardinality": 0,
184
- "maxCardinality": 1,
185
- "name": "testSaturn",
186
- "productCharacteristicValue": [
187
- {
188
- "isDefault": false,
189
- "unitOfMeasure": "MBPS",
190
- "value": "1000",
191
- "valueType": "string"
192
- }
193
- ],
194
- "valueType": "string"
195
- }
196
- ```
197
- * **Explanation:** This payload creates a characteristic named 'testSaturn' with a value of '1000 MBPS', defining its behavior (e.g., not configurable, not mandatory). You would typically obtain the `id` from the response of this call for use in subsequent steps.
198
-
199
- **Step 2: Create a Product Offering Price**
200
- * **Description:** Defines the pricing structure for a product, including its value, type, and unit of measure.
201
- * **Request URL:** `POST https://learning.test.orbitant.dev/api/productCatalogManagement/v4/productOfferingPrice`
202
- * **Example Payload:**
203
- ```json
204
- {
205
- "name": "testSaturnPrice",
206
- "version": "0",
207
- "priceType": "One time charge",
208
- "unitOfMeasure": {
209
- "units": "Day",
210
- "amount": 1
211
- },
212
- "recurringChargePeriodType": "monthly",
213
- "recurringChargePeriodLength": 0,
214
- "isBundle": false,
215
- "lifecycleStatus": "In study",
216
- "price": {
217
- "value": 100,
218
- "unit": "USD"
219
- },
220
- "percentage": 0
221
- }
222
- ```
223
- * **Explanation:** This payload defines a one-time price of 100 USD for a product offering. It specifies the price type, currency, and any recurring charge details. You would typically obtain the `id` from the response of this call.
224
-
225
- **Step 3: Create a Product Specification**
226
- * **Description:** Ties product characteristics and their values together to define the technical details of a product.
227
- * **Request URL:** `POST https://learning.test.orbitant.dev/api/productCatalogManagement/v4/productSpecification`
228
- * **Example Payload:**
229
- ```json
230
- {
231
- "name": "testSaturnSpec",
232
- "isBundle": false,
233
- "lifecycleStatus": "In study",
234
- "version": "0",
235
- "productSpecCharacteristic": [
236
- {
237
- "id": "GENERATED_PRODUCT_CHARACTERISTIC_ID_FROM_STEP1",
238
- "name": "testSaturn",
239
- "characteristicType": "Simple Value",
240
- "valueType": "string",
241
- "configurable": false,
242
- "isVisible": false,
243
- "mandatory": false,
244
- "extensible": false,
245
- "minCardinality": 0,
246
- "maxCardinality": 1,
247
- "isUnique": false,
248
- "productSpecCharacteristicValue": [
249
- {
250
- "valueType": "string",
251
- "value": "1000",
252
- "unitOfMeasure": "MBPS",
253
- "isDefault": false
254
- }
255
- ],
256
- "@type": "ProductCharacteristic",
257
- "@baseType": "ProductCharacteristic"
258
- }
259
- ]
260
- }
261
- ```
262
- * **Explanation:** This payload creates a product specification. It includes the `id` of the `ProductCharacteristic` created in Step 1, associating that characteristic with this specification. You would typically obtain the `id` from the response of this call.
263
-
264
- **Step 4: Create a Product Offering**
265
- * **Description:** Combines the product specification and pricing to form a complete, sellable offer.
266
- * **Request URL:** `POST https://learning.test.orbitant.dev/api/productCatalogManagement/v4/productOffering`
267
- * **Example Payload:**
268
- ```json
269
- {
270
- "name": "testSaturnOffer",
271
- "isBundle": false,
272
- "lastUpdate": "2025-05-28T11:57:27.670Z",
273
- "lifecycleStatus": "In study",
274
- "version": "0",
275
- "isSellable": false,
276
- "productSpecification": {
277
- "id": "GENERATED_PRODUCT_SPECIFICATION_ID_FROM_STEP3",
278
- "href": "/api/productCatalogManagement/v4/productSpecification/GENERATED_PRODUCT_SPECIFICATION_ID_FROM_STEP3:(version=0)",
279
- "name": "testSaturnSpec",
280
- "version": "0"
281
- },
282
- "productOfferingPrice": [
283
- {
284
- "id": "GENERATED_PRODUCT_OFFERING_PRICE_ID_FROM_STEP2",
285
- "href": "/api/productCatalogManagement/v4/productOfferingPrice/GENERATED_PRODUCT_OFFERING_PRICE_ID_FROM_STEP2:(version=0)",
286
- "name": "testSaturnPrice",
287
- "version": "0",
288
- "@type": "ProductOfferingPrice",
289
- "@referredType": "Product Offering Price"
290
- }
291
- ],
292
- "prodSpecCharValueUse": [
293
- {
294
- "productSpecCharacteristicValue": [
295
- {
296
- "isDefault": false,
297
- "unitOfMeasure": "MBPS",
298
- "value": "1000",
299
- "valueType": "string"
300
- }
301
- ],
302
- "name": "testSaturn",
303
- "characteristicType": "Simple Value",
304
- "valueType": "string",
305
- "minCardinality": 0,
306
- "maxCardinality": 1,
307
- "productSpecification": {
308
- "id": "GENERATED_PRODUCT_SPECIFICATION_ID_FROM_STEP3",
309
- "href": "/api/productCatalogManagement/v4/productSpecification/GENERATED_PRODUCT_SPECIFICATION_ID_FROM_STEP3:(version=0)",
310
- "name": "testSaturnSpec",
311
- "version": "0"
312
- },
313
- "configurable": false,
314
- "isVisible": false,
315
- "mandatory": false
316
- }
317
- ],
318
- "category": [
319
- // MANDATORY: Add a CategoryRef here (e.g., after creating a category via /category endpoint)
320
- // Example: {"id": "category-id", "href": "/api/productCatalogManagement/v4/category/category-id", "name": "Category Name", "@referredType": "Category"}
321
- ],
322
- "productCatalog": [
323
- // MANDATORY: Add a ProductCatalogRef here (e.g., after creating a catalog via /productCatalog endpoint)
324
- // Example: {"id": "catalog-id", "href": "/api/productCatalogManagement/v4/productCatalog/catalog-id", "name": "Catalog Name", "@referredType": "ProductCatalog"}
325
- ]
326
- }
327
- ```
328
- * **Explanation:** This payload defines the complete `ProductOffering`. It references the `ProductSpecification` (from Step 3) and `ProductOfferingPrice` (from Step 2) using their generated IDs. It also re-iterates the product characteristic details for clarity within the offer. **Crucially, it requires `category` and `productCatalog` references which would need to be created via their respective endpoints first, if not already existing.**
329
 
330
  **API_DESCRIPTION_END**
331
  ====================================================
 
1
  ====================================================
2
+ **API_DESCRIPTION_BEGIN**
3
 
4
  **Description:** Dnext Product Catalog API, which is compliant with the TMF620 Product Catalog Management standard.
5
  This API allows users to manage key catalog elements such as product offerings, specifications, characteristics, and pricing.
6
  It meets TMF620 minimum requirements while incorporating Dnext-specific fields or validations.
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  **Core API Entities and Their Attributes:**
9
  **1. ProductCatalog**
10
  * **Description:** The central organizing entity for product-related data. It groups `ProductOffering`s and `Category` objects.
 
15
  * `description` (string): Optional. Description of this catalog.
16
  * `lifecycleStatus` (string): Optional. Used to indicate the current lifecycle status (e.g., "Active", "Retired", "Draft").
17
  * `version` (string): Optional. Version of the catalog.
 
18
  * `category` (array of `CategoryRef`): Optional. List of root categories contained in this catalog.
19
+
 
20
 
21
  **2. Category**
22
  * **Description:** Used for logically grouping product offerings. Categories can have a hierarchical structure (sub-categories).
 
28
  * `isRoot` (boolean): Optional. Indicates if this is a root category (default: `false`).
29
  * `lifecycleStatus` (string): Optional. Used to indicate the current lifecycle status.
30
  * `version` (string): Optional. Version of the category.
 
31
  * `parent` (`CategoryRef` object): Optional. Reference to the parent category if this is a sub-category.
32
  * `productCatalog` (array of `ProductCatalogRef`): Optional. References to the catalogs this category belongs to.
33
  * `productOffering` (array of `ProductOfferingRef`): Optional. References to product offerings associated with this category.
34
+
 
35
 
36
  **3. ProductCharacteristic**
37
  * **Description:** Represents a characteristic (attribute) of a product or product specification.
 
47
  * `maxCardinality` (integer): Optional. Max instances.
48
  * `minCardinality` (integer): Optional. Min instances.
49
  * `regex` (string): Optional. Regex to validate the value.
 
50
  * `productCharValue` (array of `ProductCharacteristicValue`): Optional. List of possible values.
 
51
 
52
  **4. ProductSpecification**
53
  * **Description:** Defines the technical details and attributes of a product or service.
 
62
  * `name` (string): Optional. Name of the specification.
63
  * `productNumber` (string): Optional. Product number.
64
  * `version` (string): Optional. Version.
 
65
  * `productSpecCharacteristic` (array of `ProductCharacteristic`): Optional. List of characteristics for this specification.
66
  * `serviceSpecification` (array of `ServiceSpecificationRef`): Optional. References to related service specifications.
67
  * `resourceSpecification` (array of `ResourceSpecificationRef`): Optional. References to related resource specifications.
68
  * `productSpecificationRelationship` (array of `ProductSpecificationRelationship`): Optional. Relationships with other specs.
 
 
69
  * `targetProductSchema` (`TargetProductSchema` object): Optional. Schema reference.
70
+
71
 
72
  **5. ProductOfferingPrice**
73
  * **Description:** Details the pricing information for a `ProductOffering`.
 
77
  * `name` (string): **Mandatory**. Name of the price (e.g., "Monthly Fee", "One-Time Setup").
78
  * `description` (string): Optional. Description of the price.
79
  * `priceType` (string): **Mandatory**. Type of price (e.g., "recurring", "one time", "usage").
 
80
  * `price` (`Money` object): **Mandatory**. The monetary value.
81
  * `price.value` (number): **Mandatory**. Numeric price value.
82
  * `price.unit` (string): **Mandatory**. Currency unit (e.g., "USD", "TRY").
 
91
  * `productOfferingPriceRelationship` (array of `ProductOfferingPriceRelationship`): Optional. Relationships with other prices.
92
  * `popRelationship` (array of `ProductOfferingPriceRelationship`): Optional. Alias for `productOfferingPriceRelationship`.
93
  * `constraint` (array of `ConstraintRef`): Optional. Constraints.
 
 
94
 
95
  **6. ProductOffering**
96
  * **Description:** Represents a product or service offered to customers, linking specifications, pricing, and catalog organization.
 
104
  * `isBundle` (boolean): Optional. True if a bundle (default: false).
105
  * `isSellable` (boolean): Optional. True if sellable.
106
  * `version` (string): Optional. Version.
 
107
  * `category` (array of `CategoryRef`): References to categories this offering belongs to.
108
  * `productSpecification` (`ProductSpecificationRef` object): **Mandatory**. Reference to the underlying product specification.
109
  * `productOfferingPrice` (array of `ProductOfferingPriceRef`): Optional. References to associated prices.
110
  * `channel` (array of `ChannelRef`): Optional. Channels.
111
  * `place` (array of `PlaceRef`): Optional. Places.
 
112
  * `bundledProductOffering` (array of `BundledProductOffering`): Optional. If `isBundle` is true, lists contained offerings.
113
  * `resourceCandidate` (`ResourceCandidateRef` object): Optional. Resource candidate.
114
  * `serviceCandidate` (`ServiceCandidateRef` object): Optional. Service candidate.
115
  * `prodSpecCharValueUse` (array of `ProdSpecCharValueUse`): Optional. Defines char usage.
 
 
 
116
 
117
+ =============================================================
118
  **Common Referenced Objects:**
 
119
  * **`Money`:** `{ "value": "number", "unit": "string" }`
120
  * **`Quantity`:** `{ "amount": "number", "unit": "string" }`
121
  * **Reference Objects (`ProductCatalogRef`, `CategoryRef`, `ProductSpecificationRef`, `ProductOfferingPriceRef`, etc.):**
122
  * Typically contain `id` (string), `href` (string), `name` (string), and `@referredType` (string).
123
  * Example: `{"id": "some-id", "href": "path/to/resource/some-id", "name": "Resource Name", "@referredType": "ProductCatalog"}`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
  **API_DESCRIPTION_END**
126
  ====================================================