{"openapi":"3.1.0","info":{"title":"EKBPRO API","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/action-probe":{"get":{"summary":"Test actionflyt og hent API-kapabiliteter","description":"Returner API-manifest for AI-agenter (ChatGPT, Copilot).\nKall dette endepunktet først for å forstå hva API-et tilbyr og\nhvilken arbeidsflyt som anbefales.","operationId":"action_probe_action_probe_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/action-probe-project":{"post":{"summary":"Valider prosjektpayload og hent arbeidsflytforslag","description":"Valider et prosjektobjekt og returner status, mangler og foreslåtte neste steg.\nNyttig for AI-agenter som vil bekrefte at prosjektdata er komplett før /calculate.","operationId":"action_probe_project_action_probe_project_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/openapi-actions.json":{"get":{"summary":"Openapi Actions","operationId":"openapi_actions_openapi_actions_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/copilot-actions.json":{"get":{"summary":"Copilot Actions","operationId":"copilot_actions_copilot_actions_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/project/gui":{"get":{"summary":"Project Gui","operationId":"project_gui_project_gui_get","parameters":[{"name":"draft_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/quote/new":{"get":{"summary":"Ny tilbud-veiviser","operationId":"quote_new_quote_new_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/service":{"get":{"summary":"Service Gui","operationId":"service_gui_service_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/project/drafts":{"post":{"summary":"Lagre prosjektutkast","operationId":"save_project_draft_project_drafts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDraftSaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDraftMeta"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List prosjektutkast","operationId":"list_project_drafts_project_drafts_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDraftMeta"},"title":"Response List Project Drafts Project Drafts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/project/drafts/gui":{"get":{"summary":"Prosjektleder utkastoversikt","operationId":"drafts_gui_project_drafts_gui_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/project/drafts/{draft_id}":{"get":{"summary":"Hent prosjektutkast","operationId":"load_project_draft_project_drafts__draft_id__get","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","title":"Draft Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDraftDocument"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Slett prosjektutkast","operationId":"delete_project_draft_project_drafts__draft_id__delete","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","title":"Draft Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/project/gui/run":{"post":{"summary":"Project Gui Run","operationId":"project_gui_run_project_gui_run_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/suppliers/products":{"get":{"summary":"Søk i leverandørcache","operationId":"supplier_product_search_suppliers_products_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"supplier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/suppliers/products/{vare_no}":{"get":{"summary":"Slå opp elnummer i leverandørcache","operationId":"supplier_product_lookup_suppliers_products__vare_no__get","parameters":[{"name":"vare_no","in":"path","required":true,"schema":{"type":"string","title":"Vare No"}},{"name":"supplier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/search":{"post":{"summary":"Søk produkt og pris for ChatGPT","operationId":"supplier_catalog_search_catalog_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCatalogSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCatalogSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calculate":{"post":{"summary":"Calculate","operationId":"calculate_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calculate/summary":{"post":{"summary":"Beregn prosjekt – kompakt sammendrag","description":"Kjører samme beregning som /calculate, men returnerer kun nøkkeldata: tilbudspris, stikk/lys per rom, antall kurser, last og eventuelle mangler. Anbefalt for ChatGPT og Copilot på store prosjekter for å unngå ResponseTooLarge.","operationId":"calculate_summary_calculate_summary_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/estimate/service/variants":{"get":{"summary":"List tilgjengelige materialvarianter for serviceoppdrag","description":"Returnerer tilgjengelige materialvarianter med beskrivelse og overrides.","operationId":"get_service_variants_estimate_service_variants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/estimate/service":{"post":{"summary":"Estimér serviceoppdrag","description":"Beregn pris for et serviceoppdrag uten romstruktur.\n\nSend en liste over arbeidsoppgaver med punktkode og antall.\nReturnerer pris per oppgave, totalpris, timer og materialkostnad.","operationId":"estimate_service_estimate_service_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceEstimateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/service-material-list-link":{"post":{"summary":"Eksporter serviceoppdrag som Excel-materialliste","description":"Generer Excel-materialliste for et serviceoppdrag.\nReturnerer en midlertidig nedlastingslenke (download_url).","operationId":"export_service_material_list_link_export_service_material_list_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceEstimateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/service-pdf-link":{"post":{"summary":"Eksporter serviceoppdrag som PDF-tilbud","description":"Generer et enkelt PDF-tilbud for et serviceoppdrag.\nReturnerer en midlertidig nedlastingslenke (download_url).","operationId":"export_service_pdf_link_export_service_pdf_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceEstimateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/pdf-link":{"post":{"summary":"Eksporter tilbud som PDF med nedlastingslenke","operationId":"export_pdf_link_export_pdf_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/word-link":{"post":{"summary":"Eksporter tilbud som Word-dokument med nedlastingslenke","operationId":"export_word_link_export_word_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/word-json":{"post":{"summary":"Eksporter tilbud som Word-dokument i JSON-wrapper","operationId":"export_word_json_export_word_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFilePayload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/course-registry-pdf-link":{"post":{"summary":"Eksporter kursfortegnelse som PDF med nedlastingslenke","operationId":"export_course_registry_pdf_link_export_course_registry_pdf_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/course-registry-word-link":{"post":{"summary":"Eksporter kursfortegnelse som Word (.docx) med nedlastingslenke","operationId":"export_course_registry_word_link_export_course_registry_word_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/course-registry-excel-link":{"post":{"summary":"Eksporter kursfortegnelse som Excel med nedlastingslenke","operationId":"export_course_registry_excel_link_export_course_registry_excel_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/offer-package":{"post":{"summary":"Eksporter komplett tilbudspakke","description":"Beregner prosjektet og genererer fire dokumenter i ett kall: kundetilbud PDF, kundetilbud Word, materialliste Excel og kursfortegnelse PDF. Returnerer midlertidige nedlastingslenker til alle fire filene. Bruk customer_name, customer_address og customer_postal for å få kundeinfo i tilbudet.","operationId":"export_offer_package_export_offer_package_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferPackageLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/material-list-link":{"post":{"summary":"Eksporter materialliste som Excel med nedlastingslenke","operationId":"export_material_list_link_export_material_list_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/ets":{"post":{"summary":"Eksporter KNX-underlag som CSV","operationId":"export_ets_export_ets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/homeassistant":{"post":{"summary":"Eksporter Home Assistant YAML","operationId":"export_homeassistant_export_homeassistant_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/tavleplan":{"post":{"summary":"Returner tavleplan som JSON","operationId":"export_tavleplan_export_tavleplan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/plejd-bom":{"post":{"summary":"Returner Plejd-enhetsliste som JSON","operationId":"export_plejd_bom_export_plejd_bom_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectModel-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/downloads/{token}":{"get":{"summary":"Download File","operationId":"download_file_downloads__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/design/house-from-text":{"post":{"summary":"Generer prosjektutkast fra tekst","operationId":"design_house_from_text_design_house_from_text_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_design_house_from_text_design_house_from_text_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/sheets":{"post":{"summary":"List ark i opplastet Excel-fil","operationId":"ga_generator_sheets_ga_generator_sheets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GAGeneratorSheetListRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/gui/sheets":{"post":{"summary":"List ark i Excel-fil fra GUI","operationId":"ga_generator_gui_sheets_ga_generator_gui_sheets_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ga_generator_gui_sheets_ga_generator_gui_sheets_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/export-json":{"post":{"summary":"Generer GA/ETS CSV i JSON-wrapper","operationId":"ga_generator_export_json_ga_generator_export_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GAGeneratorExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFilePayload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/export-meta":{"post":{"summary":"Generer GA/ETS CSV metadata","operationId":"ga_generator_export_meta_ga_generator_export_meta_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GAGeneratorExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GAGeneratorMetaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/export-link":{"post":{"summary":"Generer GA/ETS CSV med nedlastingslenke","operationId":"ga_generator_export_link_ga_generator_export_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GAGeneratorExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportFileLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga-generator/gui":{"get":{"summary":"Ga Generator Gui","operationId":"ga_generator_gui_ga_generator_gui_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/login":{"get":{"summary":"Prisadmin innlogging","operationId":"admin_login_form_admin_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Logg inn i prisadmin","operationId":"admin_login_admin_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_login_admin_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/logout":{"post":{"summary":"Logg ut av prisadmin","operationId":"admin_logout_admin_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/login":{"get":{"summary":"Prosjektleder innlogging","operationId":"pm_login_form_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Logg inn som prosjektleder","operationId":"pm_login_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_pm_login_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"post":{"summary":"Logg ut","operationId":"pm_logout_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/users":{"get":{"summary":"List admin-brukere","operationId":"admin_users_list_admin_users_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Opprett admin-bruker","operationId":"admin_users_create_admin_users_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{username}":{"delete":{"summary":"Slett admin-bruker","operationId":"admin_users_delete_admin_users__username__delete","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{username}/change-password":{"post":{"summary":"Endre passord for admin-bruker","operationId":"admin_users_change_password_admin_users__username__change_password_post","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/audit":{"get":{"summary":"Hent admin-hendelseslogg","operationId":"admin_audit_log_admin_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/gui":{"get":{"summary":"Admin-bruker GUI","operationId":"admin_users_gui_admin_users_gui_get","parameters":[{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"","title":"Message"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/gui/create":{"post":{"summary":"Admin Users Gui Create","operationId":"admin_users_gui_create_admin_users_gui_create_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/gui/delete":{"post":{"summary":"Admin Users Gui Delete","operationId":"admin_users_gui_delete_admin_users_gui_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/gui/change-password":{"post":{"summary":"Admin Users Gui Change Password","operationId":"admin_users_gui_change_password_admin_users_gui_change_password_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/audit/gui":{"get":{"summary":"Admin-hendelseslogg GUI","operationId":"admin_audit_gui_admin_audit_gui_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/material-map/gui":{"get":{"summary":"Materialmapping GUI","operationId":"admin_material_map_gui_admin_material_map_gui_get","parameters":[{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Profile"}},{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"","title":"Message"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/material-map/gui/save":{"post":{"summary":"Admin Material Map Gui Save","operationId":"admin_material_map_gui_save_admin_material_map_gui_save_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/material-map/gui/delete":{"post":{"summary":"Admin Material Map Gui Delete","operationId":"admin_material_map_gui_delete_admin_material_map_gui_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/product-metadata/gui":{"get":{"summary":"Produktmetadata GUI","operationId":"admin_product_metadata_gui_admin_product_metadata_gui_get","parameters":[{"name":"selected","in":"query","required":false,"schema":{"type":"string","default":"","title":"Selected"}},{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"","title":"Message"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/product-metadata/gui/save":{"post":{"summary":"Admin Product Metadata Gui Save","operationId":"admin_product_metadata_gui_save_admin_product_metadata_gui_save_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/product-metadata/gui/delete":{"post":{"summary":"Admin Product Metadata Gui Delete","operationId":"admin_product_metadata_gui_delete_admin_product_metadata_gui_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/material-map/{profile}":{"get":{"summary":"Hent materialmapping for profil","operationId":"admin_material_map_get_admin_material_map__profile__get","parameters":[{"name":"profile","in":"path","required":true,"schema":{"type":"string","title":"Profile"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/material-map/{profile}/{point_code}":{"put":{"summary":"Lagre mapping-oppslag","operationId":"admin_material_map_set_admin_material_map__profile___point_code__put","parameters":[{"name":"profile","in":"path","required":true,"schema":{"type":"string","title":"Profile"}},{"name":"point_code","in":"path","required":true,"schema":{"type":"string","title":"Point Code"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Slett mapping-oppslag","operationId":"admin_material_map_delete_admin_material_map__profile___point_code__delete","parameters":[{"name":"profile","in":"path","required":true,"schema":{"type":"string","title":"Profile"}},{"name":"point_code","in":"path","required":true,"schema":{"type":"string","title":"Point Code"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/product-metadata":{"get":{"summary":"Hent all produktmetadata","operationId":"admin_product_metadata_list_admin_product_metadata_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/product-metadata/{elnummer}":{"get":{"summary":"Hent produktmetadata for elnummer","operationId":"admin_product_metadata_get_admin_product_metadata__elnummer__get","parameters":[{"name":"elnummer","in":"path","required":true,"schema":{"type":"string","title":"Elnummer"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Lagre produktmetadata","operationId":"admin_product_metadata_set_admin_product_metadata__elnummer__put","parameters":[{"name":"elnummer","in":"path","required":true,"schema":{"type":"string","title":"Elnummer"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Slett produktmetadata","operationId":"admin_product_metadata_delete_admin_product_metadata__elnummer__delete","parameters":[{"name":"elnummer","in":"path","required":true,"schema":{"type":"string","title":"Elnummer"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/status":{"get":{"summary":"Hent prisbokstatus","operationId":"admin_pricebooks_status_admin_pricebooks_status_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/list":{"get":{"summary":"List prisbokfiler","operationId":"admin_pricebooks_list_admin_pricebooks_list_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/search-product":{"get":{"summary":"Søk i importert prisindeks","description":"Søk i importert prisindeks (elnummer / delnummer / navn) med fuzzy matching.\n\nReturnerer opp til 50 treff med produktnavn og listepris.","operationId":"admin_pricebooks_search_product_admin_pricebooks_search_product_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"include_sources","in":"query","required":false,"schema":{"type":"string","default":"","title":"Include Sources"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/test-point":{"get":{"summary":"Test pris for punkt/profil","description":"Returner pris-kalkyle for et punkt under en profil.\n\nReturnerer punktpris, antall timer og kalkulert arbeid + materialkost.","operationId":"admin_pricebooks_test_point_admin_pricebooks_test_point_get","parameters":[{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Profile"}},{"name":"point_code","in":"query","required":false,"schema":{"type":"string","default":"double_outlet","title":"Point Code"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","default":"electrician","title":"Role"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/point-profiles":{"get":{"summary":"Hent punktpriser på tvers av profiler","description":"Gir en oversikt over punktinnstillinger for alle profiler i aktiv prisbok.","operationId":"admin_pricebooks_point_profiles_admin_pricebooks_point_profiles_get","parameters":[{"name":"point_code","in":"query","required":false,"schema":{"type":"string","default":"double_outlet","title":"Point Code"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/batch-calculate":{"post":{"summary":"Batch-kalkkuler flere punkt/profil-kombinasjoner","description":"Kalkkuler priser for flere punkt/profil/rolle-kombinasjoner på en gang.\n\nInput eks: [{\"profile\": \"conventional\", \"point_code\": \"double_outlet\", \"role\": \"electrician\"}, ...]","operationId":"admin_pricebooks_batch_calculate_admin_pricebooks_batch_calculate_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"default":[],"title":"Calcs"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/import-history":{"get":{"summary":"Hent historikk over alle prisimporter","description":"Returnerer liste over alle prisimporter med metadata (tid, antall, kilder).","operationId":"admin_pricebooks_import_history_admin_pricebooks_import_history_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/activate":{"post":{"summary":"Aktiver prisbok","operationId":"admin_pricebooks_activate_admin_pricebooks_activate_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricebookActivatePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/archive":{"post":{"summary":"Arkiver aktiv prisbok","operationId":"admin_pricebooks_archive_admin_pricebooks_archive_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricebookArchivePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricefiles/status":{"get":{"summary":"Hent prisfilstatus","operationId":"admin_pricefiles_status_admin_pricefiles_status_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/pricefiles/delete/{source}":{"post":{"summary":"Slett opplastet prisfil","operationId":"admin_pricebooks_pricefile_delete_admin_pricebooks_pricefiles_delete__source__post","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricefiles/upload/{source}":{"post":{"summary":"Last opp prisfil","operationId":"admin_pricefiles_upload_admin_pricefiles_upload__source__post","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_pricefiles_upload_admin_pricefiles_upload__source__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/import-materials":{"post":{"summary":"Importer materialpriser","operationId":"admin_pricebooks_import_materials_admin_pricebooks_import_materials_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/upload-csv":{"post":{"summary":"Last opp CSV-prismal og importer til aktiv prisbok","description":"Last opp 'Punkt og prisberegning MAL.csv' og importer punktpriser til aktiv prisbok.\nEksisterende timer-verdier beholdes. Aktiv prisbok arkiveres for slik endring.","operationId":"admin_pricebooks_upload_csv_admin_pricebooks_upload_csv_post","parameters":[{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Profile"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_pricebooks_upload_csv_admin_pricebooks_upload_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/points":{"get":{"summary":"Hent alle punkter i aktiv prisbok per profil","description":"Returnerer alle punktkoder med label, kategori og priser for valgt profil.","operationId":"admin_pricebooks_points_admin_pricebooks_points_get","parameters":[{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Profile"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/points/{point_code}":{"put":{"summary":"Oppdater enkelt punkt i aktiv prisbok","description":"Oppdater label, point_price, hours eller pricing_mode for et enkelt punkt.","operationId":"admin_pricebooks_update_point_admin_pricebooks_points__point_code__put","parameters":[{"name":"point_code","in":"path","required":true,"schema":{"type":"string","title":"Point Code"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Profile"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers":{"get":{"summary":"List leverandorkilder","operationId":"admin_suppliers_admin_suppliers_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/{supplier_id}":{"get":{"summary":"Hent leverandoroppsett","operationId":"admin_supplier_detail_admin_suppliers__supplier_id__get","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/configure":{"post":{"summary":"Lagre leverandoroppsett","operationId":"admin_supplier_configure_admin_suppliers_configure_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierConfigPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/delete/{supplier_id}":{"post":{"summary":"Slett leverandorkilde","operationId":"admin_supplier_delete_admin_suppliers_delete__supplier_id__post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/test-connection/{supplier_id}":{"post":{"summary":"Test leverandortilkobling","operationId":"admin_supplier_test_connection_admin_suppliers_test_connection__supplier_id__post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/ingest/{supplier_id}":{"post":{"summary":"Importer leverandorpriser","operationId":"admin_supplier_ingest_admin_suppliers_ingest__supplier_id__post","parameters":[{"name":"supplier_id","in":"path","required":true,"schema":{"type":"string","title":"Supplier Id"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/scheduler/status":{"get":{"summary":"Hent leverandorscheduler-status","operationId":"admin_supplier_scheduler_status_admin_suppliers_scheduler_status_get","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/scheduler/run":{"post":{"summary":"Kjor leverandorscheduler","operationId":"admin_supplier_scheduler_run_admin_suppliers_scheduler_run_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/scheduler/configure":{"post":{"summary":"Lagre leverandorscheduler","operationId":"admin_supplier_scheduler_configure_admin_suppliers_scheduler_configure_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierSchedulerConfigPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui":{"get":{"summary":"Prisadmin GUI","operationId":"admin_pricebooks_gui_admin_pricebooks_gui_get","parameters":[{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"","title":"Message"}},{"name":"tab","in":"query","required":false,"schema":{"type":"string","default":"pricebooks","title":"Tab"}},{"name":"supplier_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Supplier Id"}},{"name":"new_supplier","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"New Supplier"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/activate":{"post":{"summary":"Aktiver prisbok fra GUI","operationId":"admin_pricebooks_gui_activate_admin_pricebooks_gui_activate_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_pricebooks_gui_activate_admin_pricebooks_gui_activate_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/archive":{"post":{"summary":"Arkiver prisbok fra GUI","operationId":"admin_pricebooks_gui_archive_admin_pricebooks_gui_archive_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_pricebooks_gui_archive_admin_pricebooks_gui_archive_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/pricefiles/upload/{source}":{"post":{"summary":"Last opp prisfil fra GUI","operationId":"admin_pricebooks_gui_pricefile_upload_admin_pricebooks_gui_pricefiles_upload__source__post","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_pricebooks_gui_pricefile_upload_admin_pricebooks_gui_pricefiles_upload__source__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/import-materials":{"post":{"summary":"Importer materialpriser fra GUI","operationId":"admin_pricebooks_gui_import_materials_admin_pricebooks_gui_import_materials_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricefiles/gui/upload":{"post":{"summary":"Last opp prisfil til materials/upload/","operationId":"admin_pricefiles_gui_upload_admin_pricefiles_gui_upload_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_pricefiles_gui_upload_admin_pricefiles_gui_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricefiles/gui/delete":{"post":{"summary":"Slett opplastet prisfil","operationId":"admin_pricefiles_gui_delete_admin_pricefiles_gui_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/profiles/meta":{"post":{"summary":"Admin Pricebooks Gui Profiles Meta","operationId":"admin_pricebooks_gui_profiles_meta_admin_pricebooks_gui_profiles_meta_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/profiles/profile/save":{"post":{"summary":"Admin Pricebooks Gui Profiles Save Profile","operationId":"admin_pricebooks_gui_profiles_save_profile_admin_pricebooks_gui_profiles_profile_save_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/profiles/point/upsert":{"post":{"summary":"Admin Pricebooks Gui Profiles Upsert Point","operationId":"admin_pricebooks_gui_profiles_upsert_point_admin_pricebooks_gui_profiles_point_upsert_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/profiles/point/delete":{"post":{"summary":"Admin Pricebooks Gui Profiles Delete Point","operationId":"admin_pricebooks_gui_profiles_delete_point_admin_pricebooks_gui_profiles_point_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/upload-csv":{"post":{"summary":"Admin Pricebooks Gui Upload Csv","description":"GUI-handler: last opp CSV-prismal og importer til aktiv prisbok.","operationId":"admin_pricebooks_gui_upload_csv_admin_pricebooks_gui_upload_csv_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_pricebooks_gui_upload_csv_admin_pricebooks_gui_upload_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricebooks/gui/punktliste/save":{"post":{"summary":"Admin Pricebooks Gui Punktliste Save","description":"GUI-handler: lagre alle punktpriser fra Punktliste-fanen.","operationId":"admin_pricebooks_gui_punktliste_save_admin_pricebooks_gui_punktliste_save_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/configure":{"post":{"summary":"Admin Suppliers Gui Configure","operationId":"admin_suppliers_gui_configure_admin_suppliers_gui_configure_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/delete":{"post":{"summary":"Admin Suppliers Gui Delete","operationId":"admin_suppliers_gui_delete_admin_suppliers_gui_delete_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/test-connection":{"post":{"summary":"Admin Suppliers Gui Test Connection","operationId":"admin_suppliers_gui_test_connection_admin_suppliers_gui_test_connection_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/ingest":{"post":{"summary":"Admin Suppliers Gui Ingest","operationId":"admin_suppliers_gui_ingest_admin_suppliers_gui_ingest_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/scheduler/run":{"post":{"summary":"Admin Suppliers Gui Scheduler Run","operationId":"admin_suppliers_gui_scheduler_run_admin_suppliers_gui_scheduler_run_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/suppliers/gui/scheduler/configure":{"post":{"summary":"Admin Suppliers Gui Scheduler Configure","operationId":"admin_suppliers_gui_scheduler_configure_admin_suppliers_gui_scheduler_configure_post","parameters":[{"name":"X-Admin-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_admin_login_admin_login_post":{"properties":{"username":{"type":"string","title":"Username","default":""},"password":{"type":"string","title":"Password","default":""},"admin_token":{"type":"string","title":"Admin Token","default":""}},"type":"object","title":"Body_admin_login_admin_login_post"},"Body_admin_pricebooks_gui_activate_admin_pricebooks_gui_activate_post":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"Body_admin_pricebooks_gui_activate_admin_pricebooks_gui_activate_post"},"Body_admin_pricebooks_gui_archive_admin_pricebooks_gui_archive_post":{"properties":{"label":{"type":"string","title":"Label","default":""}},"type":"object","title":"Body_admin_pricebooks_gui_archive_admin_pricebooks_gui_archive_post"},"Body_admin_pricebooks_gui_pricefile_upload_admin_pricebooks_gui_pricefiles_upload__source__post":{"properties":{"upload":{"type":"string","contentMediaType":"application/octet-stream","title":"Upload"}},"type":"object","required":["upload"],"title":"Body_admin_pricebooks_gui_pricefile_upload_admin_pricebooks_gui_pricefiles_upload__source__post"},"Body_admin_pricebooks_gui_upload_csv_admin_pricebooks_gui_upload_csv_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"profile":{"type":"string","title":"Profile","default":"conventional"}},"type":"object","required":["file"],"title":"Body_admin_pricebooks_gui_upload_csv_admin_pricebooks_gui_upload_csv_post"},"Body_admin_pricebooks_upload_csv_admin_pricebooks_upload_csv_post":{"properties":{"upload":{"type":"string","contentMediaType":"application/octet-stream","title":"Upload"}},"type":"object","required":["upload"],"title":"Body_admin_pricebooks_upload_csv_admin_pricebooks_upload_csv_post"},"Body_admin_pricefiles_gui_upload_admin_pricefiles_gui_upload_post":{"properties":{"upload":{"type":"string","contentMediaType":"application/octet-stream","title":"Upload"}},"type":"object","required":["upload"],"title":"Body_admin_pricefiles_gui_upload_admin_pricefiles_gui_upload_post"},"Body_admin_pricefiles_upload_admin_pricefiles_upload__source__post":{"properties":{"upload":{"type":"string","contentMediaType":"application/octet-stream","title":"Upload"}},"type":"object","required":["upload"],"title":"Body_admin_pricefiles_upload_admin_pricefiles_upload__source__post"},"Body_design_house_from_text_design_house_from_text_post":{"properties":{"description":{"type":"string","title":"Description","default":""}},"type":"object","title":"Body_design_house_from_text_design_house_from_text_post"},"Body_ga_generator_gui_sheets_ga_generator_gui_sheets_post":{"properties":{"upload":{"type":"string","contentMediaType":"application/octet-stream","title":"Upload"}},"type":"object","required":["upload"],"title":"Body_ga_generator_gui_sheets_ga_generator_gui_sheets_post"},"Body_pm_login_login_post":{"properties":{"username":{"type":"string","title":"Username","default":""},"password":{"type":"string","title":"Password","default":""}},"type":"object","title":"Body_pm_login_login_post"},"CourseRegistryEntryModel":{"properties":{"source_key":{"type":"string","title":"Source Key","description":"Intern nøkkel som kobler kurslinjen til generert kursforslag","default":""},"number":{"type":"integer","title":"Number","description":"Kursnummer","default":0},"description":{"type":"string","title":"Description","description":"Kursbeskrivelse","default":""},"protection_device":{"type":"string","title":"Protection Device","description":"Vern- eller apparattype","default":""},"current_a":{"type":"integer","title":"Current A","description":"Merkestrøm i ampere","default":0},"curve":{"type":"string","title":"Curve","description":"Vernkarakteristikk","default":""},"rcd_ma":{"type":"integer","title":"Rcd Ma","description":"Jordfeilutlosing i mA","default":30},"reference_method":{"type":"string","title":"Reference Method","description":"Referanseinstallasjonsmetode","default":""},"length_m":{"type":"number","title":"Length M","description":"Omtrentlig kurslengde i meter","default":0},"conductors":{"type":"integer","title":"Conductors","description":"Antall ledere","default":3},"cable_size_mm2":{"type":"number","title":"Cable Size Mm2","description":"Lederareal i mm2","default":2.5},"cable_type":{"type":"string","title":"Cable Type","description":"Kabeltype eller beskrivelse","default":""},"rooms":{"type":"string","title":"Rooms","description":"Rom eller omrade kursen forsyner","default":""},"notes":{"type":"string","title":"Notes","description":"Notater eller kommentarer","default":""}},"type":"object","title":"CourseRegistryEntryModel"},"CourseRegistryModel":{"properties":{"customer_name":{"type":"string","title":"Customer Name","description":"Kundenavn","default":""},"customer_address":{"type":"string","title":"Customer Address","description":"Kundeadresse","default":""},"customer_postal_place":{"type":"string","title":"Customer Postal Place","description":"Postnummer og sted","default":""},"order_number":{"type":"string","title":"Order Number","description":"Ordrenummer","default":""},"contact_person":{"type":"string","title":"Contact Person","description":"Kontaktperson","default":""},"phone":{"type":"string","title":"Phone","description":"Telefonnummer","default":""},"email":{"type":"string","title":"Email","description":"E-post","default":""},"facility_description":{"type":"string","title":"Facility Description","description":"Anleggsbeskrivelse","default":""},"facility_address":{"type":"string","title":"Facility Address","description":"Anleggsadresse","default":""},"facility_postal_place":{"type":"string","title":"Facility Postal Place","description":"Postnummer og sted for anlegget","default":""},"facility_matrikkel":{"type":"string","title":"Facility Matrikkel","description":"Matrikkel","default":""},"installation_type":{"type":"string","title":"Installation Type","description":"Anleggstype: new_installation, minor_extension, major_extension, renovation eller maintenance","default":"new_installation"},"meter_number":{"type":"string","title":"Meter Number","description":"Malernummer","default":""},"boligmappenummer":{"type":"string","title":"Boligmappenummer","description":"Boligmappenummer","default":""},"housing_type":{"type":"string","title":"Housing Type","description":"Boligtype","default":""},"started_date":{"type":"string","title":"Started Date","description":"Påbegynt installasjon","default":""},"completed_date":{"type":"string","title":"Completed Date","description":"Ferdigstilt installasjon","default":""},"delivered_date":{"type":"string","title":"Delivered Date","description":"Overlevert","default":""},"includes_engineering":{"type":"boolean","title":"Includes Engineering","description":"Dokumentet omfatter prosjektering","default":true},"includes_execution":{"type":"boolean","title":"Includes Execution","description":"Dokumentet omfatter utforelse","default":true},"company_name":{"type":"string","title":"Company Name","description":"Firmanavn","default":"Storm Elektro"},"company_address":{"type":"string","title":"Company Address","description":"Firmaadresse","default":""},"company_postal_place":{"type":"string","title":"Company Postal Place","description":"Firma postnummer og sted","default":""},"organization_number":{"type":"string","title":"Organization Number","description":"Organisasjonsnummer","default":""},"el_company_id":{"type":"string","title":"El Company Id","description":"Elvirksomhets-ID","default":""},"company_contact_person":{"type":"string","title":"Company Contact Person","description":"Firmaets kontaktperson","default":""},"company_phone":{"type":"string","title":"Company Phone","description":"Firmaets telefon","default":""},"company_email":{"type":"string","title":"Company Email","description":"Firmaets e-post","default":""},"distribution_name":{"type":"string","title":"Distribution Name","description":"Fordeling","default":""},"distribution_system":{"type":"string","title":"Distribution System","description":"Fordelingssystem","default":""},"frequency_hz":{"type":"integer","title":"Frequency Hz","description":"Frekvens i Hz","default":50},"max_load_ib_a":{"type":"number","title":"Max Load Ib A","description":"Maks belastning Ib","default":0},"dimensioning_temperature_max_c":{"type":"string","title":"Dimensioning Temperature Max C","description":"Dimensjonerende temperatur maks","default":""},"dimensioning_temperature_min_c":{"type":"string","title":"Dimensioning Temperature Min C","description":"Dimensjonerende temperatur min","default":""},"supply_from":{"type":"string","title":"Supply From","description":"Forsynt fra","default":""},"supply_cable":{"type":"string","title":"Supply Cable","description":"Tilforselskabel","default":""},"upstream_protection":{"type":"string","title":"Upstream Protection","description":"Forankoblet vern","default":""},"system_voltage_v":{"type":"integer","title":"System Voltage V","description":"Systemspenning","default":230},"phase_connection":{"type":"string","title":"Phase Connection","description":"Fasekobling","default":""},"ik3p_max_ka":{"type":"string","title":"Ik3P Max Ka","description":"Ik3p maks","default":""},"ik3p_max_source":{"type":"string","title":"Ik3P Max Source","description":"Kilde for Ik3p maks: measured, provided eller calculated","default":""},"ik3p_max_cos_phi":{"type":"string","title":"Ik3P Max Cos Phi","description":"Cos(phi) for Ik3p maks","default":""},"ik1p_max_ka":{"type":"string","title":"Ik1P Max Ka","description":"Ik1p maks","default":""},"ik1p_max_source":{"type":"string","title":"Ik1P Max Source","description":"Kilde for Ik1p maks: measured, provided eller calculated","default":""},"ik1p_max_cos_phi":{"type":"string","title":"Ik1P Max Cos Phi","description":"Cos(phi) for Ik1p maks","default":""},"ik2p_min_ka":{"type":"string","title":"Ik2P Min Ka","description":"Ik2p min","default":""},"ik2p_min_source":{"type":"string","title":"Ik2P Min Source","description":"Kilde for Ik2p min: measured, provided eller calculated","default":""},"ik2p_min_cos_phi":{"type":"string","title":"Ik2P Min Cos Phi","description":"Cos(phi) for Ik2p min","default":""},"ik1p_min_ka":{"type":"string","title":"Ik1P Min Ka","description":"Ik1p min","default":""},"ik1p_min_source":{"type":"string","title":"Ik1P Min Source","description":"Kilde for Ik1p min: measured, provided eller calculated","default":""},"ik1p_min_cos_phi":{"type":"string","title":"Ik1P Min Cos Phi","description":"Cos(phi) for Ik1p min","default":""},"incident_energy_cal_cm2":{"type":"string","title":"Incident Energy Cal Cm2","description":"Hendelsesenergi i Cal/mm2","default":""},"ppe_category":{"type":"string","title":"Ppe Category","description":"PPE-kategori","default":""},"earth_electrode":{"type":"string","title":"Earth Electrode","description":"Jordelektrode","default":""},"transition_resistance_ohm":{"type":"string","title":"Transition Resistance Ohm","description":"Overgangsmotstand i ohm","default":""},"grounding_connection_point":{"type":"string","title":"Grounding Connection Point","description":"Tilkoblingssted for jordleder","default":""},"utility_earth_connected":{"type":"boolean","title":"Utility Earth Connected","description":"Nettselskapets jordleder tilkoblet","default":false},"bonding_description_1":{"type":"string","title":"Bonding Description 1","description":"Hovedutjevningsforbindelse rad 1 beskrivelse","default":""},"bonding_length_1":{"type":"string","title":"Bonding Length 1","description":"Hovedutjevningsforbindelse rad 1 lengde","default":""},"bonding_cross_section_1":{"type":"string","title":"Bonding Cross Section 1","description":"Hovedutjevningsforbindelse rad 1 tverrsnitt","default":""},"bonding_cable_type_1":{"type":"string","title":"Bonding Cable Type 1","description":"Hovedutjevningsforbindelse rad 1 kabeltype","default":""},"bonding_description_2":{"type":"string","title":"Bonding Description 2","description":"Hovedutjevningsforbindelse rad 2 beskrivelse","default":""},"bonding_length_2":{"type":"string","title":"Bonding Length 2","description":"Hovedutjevningsforbindelse rad 2 lengde","default":""},"bonding_cross_section_2":{"type":"string","title":"Bonding Cross Section 2","description":"Hovedutjevningsforbindelse rad 2 tverrsnitt","default":""},"bonding_cable_type_2":{"type":"string","title":"Bonding Cable Type 2","description":"Hovedutjevningsforbindelse rad 2 kabeltype","default":""},"bonding_description_3":{"type":"string","title":"Bonding Description 3","description":"Hovedutjevningsforbindelse rad 3 beskrivelse","default":""},"bonding_length_3":{"type":"string","title":"Bonding Length 3","description":"Hovedutjevningsforbindelse rad 3 lengde","default":""},"bonding_cross_section_3":{"type":"string","title":"Bonding Cross Section 3","description":"Hovedutjevningsforbindelse rad 3 tverrsnitt","default":""},"bonding_cable_type_3":{"type":"string","title":"Bonding Cable Type 3","description":"Hovedutjevningsforbindelse rad 3 kabeltype","default":""},"entries":{"items":{"$ref":"#/components/schemas/CourseRegistryEntryModel"},"type":"array","title":"Entries","description":"Kurslinjer"}},"type":"object","title":"CourseRegistryModel"},"ExportFileLink":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes","description":"Storrelse pa filinnholdet i bytes."},"download_url":{"type":"string","title":"Download Url","description":"Midlertidig nedlastingslenke til eksportfilen."},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds","description":"Antall sekunder nedlastingslenken forventes a vaere gyldig."},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advarsler om manglende data i eksportfilen. Tom liste betyr ingen advarsler."}},"type":"object","required":["filename","content_type","size_bytes","download_url","expires_in_seconds"],"title":"ExportFileLink"},"ExportFilePayload":{"properties":{"filename":{"type":"string","title":"Filename","description":"Filnavn som klienten skal bruke ved lagring eller nedlasting."},"content_type":{"type":"string","title":"Content Type","description":"MIME-type for filinnholdet, for eksempel application/pdf."},"content_base64":{"type":"string","title":"Content Base64","description":"Filinnhold kodet som base64. Dekodes til den faktiske filen."}},"type":"object","required":["filename","content_type","content_base64"],"title":"ExportFilePayload"},"FileUploadPayload":{"properties":{"filename":{"type":"string","title":"Filename"},"content_base64":{"type":"string","title":"Content Base64"}},"type":"object","required":["filename","content_base64"],"title":"FileUploadPayload"},"GAGeneratorExportRequest":{"properties":{"file":{"$ref":"#/components/schemas/FileUploadPayload"},"sheet_name":{"type":"string","title":"Sheet Name"},"start_row":{"type":"integer","title":"Start Row","default":7},"end_row":{"type":"integer","title":"End Row","default":100},"empty_lines":{"type":"integer","title":"Empty Lines","default":1},"output_filename":{"type":"string","title":"Output Filename","default":"ga-export.csv"},"include_all_lights":{"type":"boolean","title":"Include All Lights","default":true},"include_all_heat":{"type":"boolean","title":"Include All Heat","default":true},"include_aerotemper":{"type":"boolean","title":"Include Aerotemper","default":false},"include_fancoil":{"type":"boolean","title":"Include Fancoil","default":false},"include_screens":{"type":"boolean","title":"Include Screens","default":false},"include_spjeld":{"type":"boolean","title":"Include Spjeld","default":false}},"type":"object","required":["file","sheet_name"],"title":"GAGeneratorExportRequest"},"GAGeneratorMetaResponse":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes","description":"Storrelse pa filinnholdet i bytes."},"has_content":{"type":"boolean","title":"Has Content","description":"Angir om eksporten ble generert og inneholder data."},"summary":{"additionalProperties":true,"type":"object","title":"Summary"}},"type":"object","required":["filename","content_type","size_bytes","has_content","summary"],"title":"GAGeneratorMetaResponse"},"GAGeneratorSheetListRequest":{"properties":{"file":{"$ref":"#/components/schemas/FileUploadPayload"}},"type":"object","required":["file"],"title":"GAGeneratorSheetListRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeatingType":{"type":"string","enum":["heating_cable","panel_heater","waterborne_floor","waterborne_radiator","heating_foil","heat_pump"],"title":"HeatingType","description":"Standard oppvarmingstyper som API-et kjenner til."},"LightingModel":{"properties":{"spots":{"type":"integer","title":"Spots","description":"Antall takspotter i rommet","default":0},"lamp_points":{"type":"integer","title":"Lamp Points","description":"Antall lampepunkter (DCL/takpunkt)","default":0},"bench_lights":{"type":"integer","title":"Bench Lights","description":"Antall benkelys (kjøkken)","default":0}},"type":"object","title":"LightingModel","description":"Manuell belysningsdefinisjon.\n\nHvis denne settes vil regelmotoren\nikke generere automatisk lysforslag."},"OfferPackageLink":{"properties":{"offer_pdf":{"$ref":"#/components/schemas/ExportFileLink","description":"Kundetilbud som PDF"},"offer_word":{"$ref":"#/components/schemas/ExportFileLink","description":"Kundetilbud som Word-dokument (redigerbart)"},"material_list_xlsx":{"$ref":"#/components/schemas/ExportFileLink","description":"Materialliste og prisgrunnlag som Excel (prosjektlederunderlag)"},"course_registry_pdf":{"$ref":"#/components/schemas/ExportFileLink","description":"Kursfortegnelse som PDF"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Advarsler om manglende data. Tom liste betyr ingen advarsler."}},"type":"object","required":["offer_pdf","offer_word","material_list_xlsx","course_registry_pdf"],"title":"OfferPackageLink","description":"Samlet eksportpakke med nedlastingslenker til alle tilbudsdokumenter."},"PlejdBomEntryModel":{"properties":{"sku":{"type":"string","title":"Sku","description":"Plejd SKU","default":""},"qty":{"type":"integer","title":"Qty","description":"Antall enheter","default":0},"category":{"type":"string","title":"Category","description":"Produktkategori","default":""},"type":{"type":"string","title":"Type","description":"Produkttype","default":""},"channels":{"type":"integer","title":"Channels","description":"Antall kanaler","default":0},"description":{"type":"string","title":"Description","description":"Produktbeskrivelse","default":""},"rooms":{"items":{"type":"string"},"type":"array","title":"Rooms","description":"Rom eller soner der produktet brukes"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes","description":"Notater og forutsetninger"}},"type":"object","title":"PlejdBomEntryModel"},"PlejdBomModel":{"properties":{"bom":{"items":{"$ref":"#/components/schemas/PlejdBomEntryModel"},"type":"array","title":"Bom","description":"Plejd BOM-linjer"},"assignments":{"additionalProperties":true,"type":"object","title":"Assignments","description":"Romvise tildelinger fra beregningen"},"assumptions":{"items":{"type":"string"},"type":"array","title":"Assumptions","description":"Forutsetninger og advarsler"}},"type":"object","title":"PlejdBomModel"},"PricebookActivatePayload":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"PricebookActivatePayload"},"PricebookArchivePayload":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","title":"PricebookArchivePayload"},"ProjectDraftDocument":{"properties":{"draft_id":{"type":"string","title":"Draft Id"},"title":{"type":"string","title":"Title"},"source":{"type":"string","title":"Source"},"updated_at":{"type":"string","title":"Updated At"},"gui_url":{"type":"string","title":"Gui Url"},"api_url":{"type":"string","title":"Api Url"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"project":{"$ref":"#/components/schemas/ProjectModel-Output"}},"type":"object","required":["draft_id","title","source","updated_at","gui_url","api_url","project"],"title":"ProjectDraftDocument"},"ProjectDraftMeta":{"properties":{"draft_id":{"type":"string","title":"Draft Id"},"title":{"type":"string","title":"Title"},"source":{"type":"string","title":"Source"},"updated_at":{"type":"string","title":"Updated At"},"gui_url":{"type":"string","title":"Gui Url"},"api_url":{"type":"string","title":"Api Url"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},"type":"object","required":["draft_id","title","source","updated_at","gui_url","api_url"],"title":"ProjectDraftMeta"},"ProjectDraftSaveRequest":{"properties":{"project":{"$ref":"#/components/schemas/ProjectModel-Input"},"draft_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source":{"type":"string","title":"Source","default":"gui"}},"type":"object","required":["project"],"title":"ProjectDraftSaveRequest"},"ProjectModel-Input":{"properties":{"name":{"type":"string","title":"Name","description":"Prosjektnavn"},"floors":{"type":"integer","title":"Floors","description":"Antall etasjer","default":1},"system":{"$ref":"#/components/schemas/SystemType","description":"Installasjonstype","default":"conventional"},"ruleset":{"type":"string","title":"Ruleset","description":"Regelprofil (nek400, bolignorm, rehab, commercial)","default":"nek400"},"project_mode":{"type":"string","title":"Project Mode","description":"new_installation eller renovation","default":"new_installation"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"Prosjektadresse / anleggsadresse"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Prosjektnotater"},"customer_name":{"type":"string","title":"Customer Name","description":"Kundens navn (person eller firma) — vises i tilbudsdokument","default":""},"customer_address":{"type":"string","title":"Customer Address","description":"Kundens postadresse (gateadresse) — vises i tilbudsdokument","default":""},"customer_postal":{"type":"string","title":"Customer Postal","description":"Kundens postnummer og poststed — vises i tilbudsdokument","default":""},"customer_contact":{"type":"string","title":"Customer Contact","description":"Kontaktperson hos kunden — vises i tilbudsdokument","default":""},"customer_reference":{"type":"string","title":"Customer Reference","description":"Kundens referansenummer eller ordrenummer (Deres ref.) — vises i tilbudsdokument","default":""},"facility_address":{"type":"string","title":"Facility Address","description":"Anleggsadresse dersom annen enn kundeadresse — vises i tilbudsdokument","default":""},"offer_number":{"type":"string","title":"Offer Number","description":"Tilbudsnummer — auto-generert om tom","default":""},"rooms":{"items":{"$ref":"#/components/schemas/RoomModel"},"type":"array","title":"Rooms","description":"Liste over rom i prosjektet"},"air_to_air_heat_pump_units":{"type":"integer","title":"Air To Air Heat Pump Units","description":"Antall luft-til-luft varmepumper i boligen","default":0},"smoke_alarm_central_units":{"type":"integer","title":"Smoke Alarm Central Units","description":"Antall komplette brannvarslingspakker med sentral (NOBY220IR2 BOLIGALARMPAKKE). Brukes i nye boliger som krever et fullstendig brannvarslingssystem. Sett til 1 for ett komplett system. Erstatter enkle smoke_detectors-telling når sentralsystem er valgt.","default":0},"smoke_alarm_wireless_units":{"type":"integer","title":"Smoke Alarm Wireless Units","description":"Antall trådløse røykvarsler med hub (FS31 TRÅDLØS RØYKVARSLER M/HUB). Alternativ til kablet sentralsystem. Sett til 1 for ett komplett trådløst system.","default":0},"sales_markup":{"type":"number","title":"Sales Markup","description":"Påslag på materiellkost når salgspris beregnes fra materialliste i stedet for punktpris.","default":1.4},"course_registry":{"anyOf":[{"$ref":"#/components/schemas/CourseRegistryModel"},{"type":"null"}],"description":"Redigerbar kursfortegnelse og tilhorende anleggsdata."},"plejd_bom":{"anyOf":[{"$ref":"#/components/schemas/PlejdBomModel"},{"type":"null"}],"description":"Redigerbar Plejd BOM og tilhorende tildelinger."},"pricing_mode_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Mode Override","description":"Overstyrer prismodus for alle punkter i prosjektet. 'point_price' = kun punktpriser fra prisboken (fast pris per installasjonspunkt). 'time_material' = kun materiell×påslag+arbeidstid. Utelat (null) for standard hybridmodus. Bruk 'point_price' for punktpris-tilbud, 'time_material' for materiell-tilbud."},"material_map_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Material Map Overrides","description":"Overstyrer standard produktvalg per punktkode. Nøkkel = punktkode (f.eks. 'double_outlet'), verdi = elnummer (f.eks. '1501363' for sort). Brukes for å velge spesifikke produkter etter katalogsøk — f.eks. sort finish, PV-serie, eller produkt funnet via leverandørsøk. ChatGPT setter dette etter /catalog/search og bekreftelse fra prosjektleder."}},"type":"object","required":["name"],"title":"ProjectModel","description":"Representerer et komplett elektroprosjekt.\n\nSendes til API:\n\nPOST /calculate"},"ProjectModel-Output":{"properties":{"name":{"type":"string","title":"Name","description":"Prosjektnavn"},"floors":{"type":"integer","title":"Floors","description":"Antall etasjer","default":1},"system":{"$ref":"#/components/schemas/SystemType","description":"Installasjonstype","default":"conventional"},"ruleset":{"type":"string","title":"Ruleset","description":"Regelprofil (nek400, bolignorm, rehab, commercial)","default":"nek400"},"project_mode":{"type":"string","title":"Project Mode","description":"new_installation eller renovation","default":"new_installation"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"Prosjektadresse / anleggsadresse"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Prosjektnotater"},"customer_name":{"type":"string","title":"Customer Name","description":"Kundens navn (person eller firma) — vises i tilbudsdokument","default":""},"customer_address":{"type":"string","title":"Customer Address","description":"Kundens postadresse (gateadresse) — vises i tilbudsdokument","default":""},"customer_postal":{"type":"string","title":"Customer Postal","description":"Kundens postnummer og poststed — vises i tilbudsdokument","default":""},"customer_contact":{"type":"string","title":"Customer Contact","description":"Kontaktperson hos kunden — vises i tilbudsdokument","default":""},"customer_reference":{"type":"string","title":"Customer Reference","description":"Kundens referansenummer eller ordrenummer (Deres ref.) — vises i tilbudsdokument","default":""},"facility_address":{"type":"string","title":"Facility Address","description":"Anleggsadresse dersom annen enn kundeadresse — vises i tilbudsdokument","default":""},"offer_number":{"type":"string","title":"Offer Number","description":"Tilbudsnummer — auto-generert om tom","default":""},"rooms":{"items":{"$ref":"#/components/schemas/RoomModel"},"type":"array","title":"Rooms","description":"Liste over rom i prosjektet"},"air_to_air_heat_pump_units":{"type":"integer","title":"Air To Air Heat Pump Units","description":"Antall luft-til-luft varmepumper i boligen","default":0},"smoke_alarm_central_units":{"type":"integer","title":"Smoke Alarm Central Units","description":"Antall komplette brannvarslingspakker med sentral (NOBY220IR2 BOLIGALARMPAKKE). Brukes i nye boliger som krever et fullstendig brannvarslingssystem. Sett til 1 for ett komplett system. Erstatter enkle smoke_detectors-telling når sentralsystem er valgt.","default":0},"smoke_alarm_wireless_units":{"type":"integer","title":"Smoke Alarm Wireless Units","description":"Antall trådløse røykvarsler med hub (FS31 TRÅDLØS RØYKVARSLER M/HUB). Alternativ til kablet sentralsystem. Sett til 1 for ett komplett trådløst system.","default":0},"sales_markup":{"type":"number","title":"Sales Markup","description":"Påslag på materiellkost når salgspris beregnes fra materialliste i stedet for punktpris.","default":1.4},"course_registry":{"anyOf":[{"$ref":"#/components/schemas/CourseRegistryModel"},{"type":"null"}],"description":"Redigerbar kursfortegnelse og tilhorende anleggsdata."},"plejd_bom":{"anyOf":[{"$ref":"#/components/schemas/PlejdBomModel"},{"type":"null"}],"description":"Redigerbar Plejd BOM og tilhorende tildelinger."},"pricing_mode_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Mode Override","description":"Overstyrer prismodus for alle punkter i prosjektet. 'point_price' = kun punktpriser fra prisboken (fast pris per installasjonspunkt). 'time_material' = kun materiell×påslag+arbeidstid. Utelat (null) for standard hybridmodus. Bruk 'point_price' for punktpris-tilbud, 'time_material' for materiell-tilbud."},"material_map_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Material Map Overrides","description":"Overstyrer standard produktvalg per punktkode. Nøkkel = punktkode (f.eks. 'double_outlet'), verdi = elnummer (f.eks. '1501363' for sort). Brukes for å velge spesifikke produkter etter katalogsøk — f.eks. sort finish, PV-serie, eller produkt funnet via leverandørsøk. ChatGPT setter dette etter /catalog/search og bekreftelse fra prosjektleder."}},"type":"object","required":["name"],"title":"ProjectModel","description":"Representerer et komplett elektroprosjekt.\n\nSendes til API:\n\nPOST /calculate"},"RoomModel":{"properties":{"name":{"type":"string","title":"Name","description":"Romnavn (f.eks 'Stue')"},"floor":{"type":"integer","title":"Floor","description":"Etasje rommet ligger i"},"room_type":{"$ref":"#/components/schemas/RoomType","description":"Romtype brukt i beregningsregler"},"area":{"type":"number","title":"Area","description":"Romstørrelse i kvadratmeter"},"cable_run_m":{"type":"number","title":"Cable Run M","description":"Omtrentlig kabelstrekk i meter brukt som grunnlag for forelopig vernvalg i bolig","default":0},"bench_length":{"type":"number","title":"Bench Length","description":"Lengde kjøkkenbenk i meter","default":0},"free_wall":{"type":"number","title":"Free Wall","description":"Lengde fri vegg i meter","default":0},"equipment":{"type":"integer","title":"Equipment","description":"Antall faste elektriske apparater (ovn, kjøl, oppvask etc)","default":0},"eating_area":{"type":"boolean","title":"Eating Area","description":"Om rommet har spiseplass","default":false},"bathroom_exhaust_fan":{"type":"boolean","title":"Bathroom Exhaust Fan","description":"Bad har avtrekksvifte, for eksempel elnummer 4910624","default":false},"outdoor_outlets":{"type":"integer","title":"Outdoor Outlets","description":"Antall utvendige stikk eller terrassepunkter","default":0},"terrace_heaters":{"type":"integer","title":"Terrace Heaters","description":"Antall terrassevarmere","default":0},"washing_machine_outlet":{"type":"boolean","title":"Washing Machine Outlet","description":"Dedikert stikk til vaskemaskin","default":false},"dryer_outlet":{"type":"boolean","title":"Dryer Outlet","description":"Dedikert stikk til tørketrommel","default":false},"drying_cabinet_outlet":{"type":"boolean","title":"Drying Cabinet Outlet","description":"Dedikert stikk til varmeskap eller tørkeskap","default":false},"utility_outlets":{"type":"integer","title":"Utility Outlets","description":"Ekstra stikk til teknisk utstyr eller annet fast utstyr","default":0},"outlet_override":{"type":"boolean","title":"Outlet Override","description":"Bruk manuelt antall stikk i stedet for automatisk beregning","default":false},"outlet_single":{"type":"integer","title":"Outlet Single","description":"Antall enkle uttak","default":0},"outlet_double":{"type":"integer","title":"Outlet Double","description":"Antall doble uttak","default":0},"outlet_quad":{"type":"integer","title":"Outlet Quad","description":"Antall 4-veis uttak","default":0},"special_requirements":{"type":"string","title":"Special Requirements","description":"Fri tekst for spesielle punkter, utstyr eller romforutsetninger","default":""},"audio":{"type":"boolean","title":"Audio","description":"Multimedia installasjon (minst 6 ekstra stikk)","default":false},"motion_sensor":{"type":"boolean","title":"Motion Sensor","description":"Rommet har bevegelsessensor","default":false},"temperature_sensor":{"type":"boolean","title":"Temperature Sensor","description":"Temperatursensor","default":false},"co2_sensor":{"type":"boolean","title":"Co2 Sensor","description":"CO2 sensor","default":false},"heating":{"type":"boolean","title":"Heating","description":"Elektrisk oppvarming i rommet","default":false},"thermostat":{"type":"boolean","title":"Thermostat","description":"Romtermostat","default":false},"heating_type":{"anyOf":[{"$ref":"#/components/schemas/HeatingType"},{"type":"null"}],"description":"Type oppvarming i rommet"},"heating_power_w":{"type":"integer","title":"Heating Power W","description":"Effektbehov for varme i watt","default":0},"dali":{"type":"boolean","title":"Dali","description":"Belysningen styres via DALI","default":false},"shutters":{"type":"integer","title":"Shutters","description":"Antall persienner / screens","default":0},"wireless_switches":{"type":"integer","title":"Wireless Switches","description":"Antall trådløse brytere","default":0},"wireless_rotaries":{"type":"integer","title":"Wireless Rotaries","description":"Antall trådløse dimmere","default":0},"lighting":{"anyOf":[{"$ref":"#/components/schemas/LightingModel"},{"type":"null"}],"description":"Manuelt definert belysning"}},"type":"object","required":["name","floor","room_type","area"],"title":"RoomModel","description":"Representerer ett rom i prosjektet.\n\nDisse dataene brukes av beregningsmotoren til å\ngenerere:\n\n• stikkontakter\n• belysning\n• KNX / Plejd enheter\n• tilbud"},"RoomType":{"type":"string","enum":["living_room","bedroom","kitchen","office","hallway","bathroom","laundry","storage_room","garage","balcony","technical_room","other"],"title":"RoomType","description":"Standard romtyper brukt av regelmotoren.\n\nDisse styrer:\n- stikkontaktberegning\n- lysforslag\n- KNX / Plejd forslag"},"ServiceEstimateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Navn på serviceoppdraget"},"items":{"items":{"$ref":"#/components/schemas/ServiceWorkItem"},"type":"array","title":"Items","description":"Liste over arbeidsoppgaver med punktkode og antall","default":[]},"sales_markup":{"type":"number","title":"Sales Markup","description":"Påslag på materiellkost (standard 1.4 = 40 %)","default":1.4},"role":{"type":"string","title":"Role","description":"Rolle som prises: 'electrician', 'apprentice' eller 'engineer'","default":"electrician"},"material_variant":{"type":"string","title":"Material Variant","description":"Materialvariant for stikkontakter og brytere. 'standard' = PV påveggs hvit, 'elko' = Elko RS-serie, 'schneider' = Schneider Mureva, 'sg' = SG innfelt (IF), 'abb' = ABB Busch-priOn","default":"standard"}},"type":"object","required":["name"],"title":"ServiceEstimateRequest","description":"Input til POST /estimate/service.\n\nEnkelt arbeidsbasert estimat uten romstruktur — for serviceoppdrag,\nenkeltinstallasjoner og småjobber."},"ServiceWorkItem":{"properties":{"point_code":{"type":"string","title":"Point Code","description":"Punktkode fra aktiv prisbok (t.d. 'double_outlet', 'circuit_new_15a')"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","description":"Antall enheter av dette punktet","default":1},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Valgfri fritekstbeskrivelse for kunden (t.d. 'Skifte stikkontakt kjøkken')"}},"type":"object","required":["point_code"],"title":"ServiceWorkItem","description":"Et enkelt arbeidsoppdrag i et serviceestimat."},"SupplierCatalogItem":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"elnummer":{"type":"string","title":"Elnummer"},"vare_no":{"type":"string","title":"Vare No"},"lookup_key_type":{"type":"string","title":"Lookup Key Type","default":"elnummer"},"name":{"type":"string","title":"Name","default":""},"brand":{"type":"string","title":"Brand","default":""},"purchase_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Purchase Price"},"list_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"List Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"matched_on":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched On"},"product":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Product"},"cost":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cost"}},"type":"object","required":["supplier_id","elnummer","vare_no"],"title":"SupplierCatalogItem"},"SupplierCatalogSearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"supplier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id"},"search_mode":{"type":"string","title":"Search Mode","default":"auto"},"limit":{"type":"integer","title":"Limit","default":10}},"type":"object","required":["query"],"title":"SupplierCatalogSearchRequest"},"SupplierCatalogSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"search_mode":{"type":"string","title":"Search Mode"},"interpreted_mode":{"type":"string","title":"Interpreted Mode"},"count":{"type":"integer","title":"Count"},"exact_match":{"anyOf":[{"$ref":"#/components/schemas/SupplierCatalogItem"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/SupplierCatalogItem"},"type":"array","title":"Items"},"supplier_errors":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Supplier Errors"}},"type":"object","required":["query","search_mode","interpreted_mode","count"],"title":"SupplierCatalogSearchResponse"},"SupplierConfigPayload":{"properties":{"supplier_id":{"type":"string","title":"Supplier Id"},"name":{"type":"string","title":"Name"},"enabled":{"type":"boolean","title":"Enabled","default":true},"transport":{"type":"string","title":"Transport","default":"local"},"format":{"type":"string","title":"Format","default":"efo_nelfo_auto"},"notes":{"type":"string","title":"Notes","default":""},"connection":{"$ref":"#/components/schemas/SupplierConnectionModel"},"sources":{"$ref":"#/components/schemas/SupplierSourceModel"},"schedule":{"$ref":"#/components/schemas/SupplierScheduleModel"}},"type":"object","required":["supplier_id","name"],"title":"SupplierConfigPayload"},"SupplierConnectionModel":{"properties":{"host":{"type":"string","title":"Host","default":""},"port":{"type":"integer","title":"Port","default":0},"username":{"type":"string","title":"Username","default":""},"password":{"type":"string","title":"Password","default":""},"remote_dir":{"type":"string","title":"Remote Dir","default":""}},"type":"object","title":"SupplierConnectionModel"},"SupplierScheduleModel":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"frequency":{"type":"string","title":"Frequency","default":"manual"},"time_of_day":{"type":"string","title":"Time Of Day","default":"02:00"},"timezone":{"type":"string","title":"Timezone","default":"Europe/Oslo"}},"type":"object","title":"SupplierScheduleModel"},"SupplierSchedulerConfigPayload":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"frequency":{"type":"string","title":"Frequency","default":"daily"},"poll_seconds":{"type":"integer","title":"Poll Seconds","default":60},"time_of_day":{"type":"string","title":"Time Of Day","default":"02:00"},"timezone":{"type":"string","title":"Timezone","default":"Europe/Oslo"}},"type":"object","title":"SupplierSchedulerConfigPayload"},"SupplierSourceModel":{"properties":{"vare_file":{"type":"string","title":"Vare File","default":""},"rabatt_file":{"type":"string","title":"Rabatt File","default":""}},"type":"object","title":"SupplierSourceModel"},"SystemType":{"type":"string","enum":["conventional","knx","plejd"],"title":"SystemType","description":"Type elektroinstallasjon som prosjekteres."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}