{"openapi":"3.0.0","paths":{"/events/definitions":{"get":{"operationId":"EventDefinitionsController_getDefinitions","parameters":[],"responses":{"200":{"description":""}}}},"/notification-rules/event-definitions":{"get":{"operationId":"NotificationRulesController_getEventDefinitions","parameters":[],"responses":{"200":{"description":""}}}},"/notification-rules/summary":{"get":{"operationId":"NotificationRulesController_getSummary","parameters":[],"responses":{"200":{"description":""}}}},"/notification-rules":{"get":{"operationId":"NotificationRulesController_findAll","parameters":[{"name":"tenantId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"post":{"operationId":"NotificationRulesController_create","parameters":[],"responses":{"201":{"description":""}}}},"/notification-rules/{id}":{"get":{"operationId":"NotificationRulesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"put":{"operationId":"NotificationRulesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNotificationRuleDto"}}}},"responses":{"200":{"description":""}}},"delete":{"operationId":"NotificationRulesController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/notification-rules/{id}/toggle":{"patch":{"operationId":"NotificationRulesController_toggle","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/device-tokens":{"post":{"operationId":"DeviceTokensController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDeviceTokenDto"}}}},"responses":{"201":{"description":""}}}},"/device-tokens/{token}":{"delete":{"operationId":"DeviceTokensController_remove","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/tenants":{"get":{"operationId":"TenantsController_findAll","summary":"List all tenants","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantListDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]},"post":{"operationId":"TenantsController_create","summary":"Create a new tenant","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTenantDto"}}}},"responses":{"201":{"description":""}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/dashboard-stats":{"get":{"operationId":"TenantsController_getDashboardStats","summary":"Get dashboard statistics for super admin","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardStatsDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/usage":{"get":{"operationId":"TenantsController_getTenantUsage","summary":"Get tenant usage statistics (forms and responses)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUsageDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}":{"get":{"operationId":"TenantsController_findOne","summary":"Get a tenant by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]},"put":{"operationId":"TenantsController_update","summary":"Update a tenant by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTenantDto"}}}},"responses":{"200":{"description":""}},"tags":["Tenant"],"security":[{"bearer":[]}]},"delete":{"operationId":"TenantsController_delete","summary":"Delete a tenant given an id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/modules":{"patch":{"operationId":"TenantsController_updateModules","summary":"Update tenant active modules","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantModulesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/billing-emails":{"patch":{"operationId":"TenantsController_updateBillingEmails","summary":"Update tenant billing emails","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantBillingEmailsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/status":{"patch":{"operationId":"TenantsController_updateStatus","summary":"Update tenant status (active, suspended, trial)","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantStatusDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/plan":{"patch":{"operationId":"TenantsController_updatePlan","summary":"Assign a plan to tenant","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantPlanDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/tenants/{id}/billing-start-date":{"patch":{"operationId":"TenantsController_updateBillingStartDate","summary":"Update tenant billing start date","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantBillingStartDateDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTenantDto"}}}}},"tags":["Tenant"],"security":[{"bearer":[]}]}},"/health":{"get":{"operationId":"HealthController_getStatus","parameters":[],"responses":{"200":{"description":"Status response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}},"tags":["HealthCheck"]}},"/health/database-connections":{"get":{"operationId":"HealthController_getDatabaseConnections","parameters":[],"responses":{"200":{"description":"Database connection manager status"}},"tags":["HealthCheck"]}},"/roles":{"get":{"operationId":"RoleController_findAll","summary":"List all roles","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"hierarchies","required":false,"in":"query","description":"Comma-separated list of hierarchies","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRoleListDto"}}}}},"tags":["Role"],"security":[{"bearer":[]}]},"post":{"operationId":"RoleController_create","summary":"Create a new role","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoleDto"}}}},"responses":{"201":{"description":""}},"tags":["Role"],"security":[{"bearer":[]}]}},"/roles/{id}":{"get":{"operationId":"RoleController_findOne","summary":"List role by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRoleDto"}}}}},"tags":["Role"],"security":[{"bearer":[]}]},"patch":{"operationId":"RoleController_update","summary":"Update role by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoleDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRoleDto"}}}}},"tags":["Role"],"security":[{"bearer":[]}]},"delete":{"operationId":"RoleController_delete","summary":"Delete role by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Role"],"security":[{"bearer":[]}]}},"/roles/{id}/permission":{"patch":{"operationId":"RoleController_updatePermission","summary":"Update role permission by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRolePermissionsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRoleDto"}}}}},"tags":["Role"],"security":[{"bearer":[]}]}},"/auth/login":{"post":{"operationId":"AuthController_login","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"201":{"description":"User authenticated successfully"}},"tags":["Auth"]}},"/users":{"get":{"operationId":"UserController_findAll","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"roles","required":false,"in":"query","description":"Comma-separated list of role ids","schema":{"type":"string"}},{"name":"regions","required":false,"in":"query","description":"Comma-separated list of regions","schema":{"type":"string"}},{"name":"teams","required":false,"in":"query","description":"Comma-separated list of team ids, can be \"no-team\"","schema":{"type":"string"}},{"name":"isActive","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserListDto"}}}}},"tags":["User"],"security":[{"bearer":[]}]},"post":{"operationId":"UserController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":""}},"tags":["User"],"security":[{"bearer":[]}]}},"/users/id/{id}":{"get":{"operationId":"UserController_findOne","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetUserDto"}}}}},"tags":["User"],"security":[{"bearer":[]}]}},"/users/{id}":{"patch":{"operationId":"UserController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"200":{"description":""}},"tags":["User"],"security":[{"bearer":[]}]},"delete":{"operationId":"UserController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["User"],"security":[{"bearer":[]}]}},"/users/{id}/assign-permission":{"patch":{"operationId":"UserController_assignPermissionToUser","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignPermissionForRouteDto"}}}},"responses":{"200":{"description":""}},"tags":["User"],"security":[{"bearer":[]}]}},"/users/role-permissions":{"get":{"operationId":"UserController_getRolePermissions","summary":"List role permissions for the logged in user","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PermissionDto"}}}}}},"tags":["User"],"security":[{"bearer":[]}]}},"/users/routes-permissions":{"get":{"operationId":"UserController_getRoutePermissions","summary":"List routes permissions for the logged in user","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PermissionDto"}}}}}},"tags":["User"],"security":[{"bearer":[]}]}},"/locations/complete-tree":{"get":{"operationId":"LocationController_getCompleteLocationTree","summary":"Get the complete tree of regions, provinces, and states","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the complete hierarchy of locations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationRegionDto"}}}}}},"tags":["Location"],"security":[{"bearer":[]}]}},"/locations/regions":{"get":{"operationId":"LocationController_getAllRegions","summary":"List all regions","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRegionList"}}}}},"tags":["Location"],"security":[{"bearer":[]}]}},"/locations/provinces/{regionId}":{"get":{"operationId":"LocationController_getProvincesByRegion","summary":"List all province by region","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"regionId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProvinceList"}}}}},"tags":["Location"],"security":[{"bearer":[]}]}},"/locations/states/{provinceId}":{"get":{"operationId":"LocationController_getStatesByProvince","summary":"List all states by province","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"provinceId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStateList"}}}}},"tags":["Location"],"security":[{"bearer":[]}]}},"/routes":{"get":{"operationId":"RouteController_getAllRoutes","summary":"List all routes","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"regions","required":false,"in":"query","description":"Comma-separated list of region ids","schema":{"type":"string"}},{"name":"provinces","required":false,"in":"query","description":"Comma-separated list of province ids","schema":{"type":"string"}},{"name":"states","required":false,"in":"query","description":"Comma-separated list of state ids","schema":{"type":"string"}},{"name":"sortColumn","required":false,"in":"query","description":"Campo para ordenar","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección de ordenamiento","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"default":{"description":"Route list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteListDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]},"post":{"operationId":"RouteController_createRoute","summary":"Create a new route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRouteDto"}}}},"responses":{"default":{"description":"Created route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRouteDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/tree":{"get":{"operationId":"RouteController_getAllRoutesTree","summary":"List all routes","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"treeFilter","required":true,"in":"query","description":"Flag to exclude levels from the grouped results.","schema":{"enum":["full","states","provinces"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"regions","required":false,"in":"query","description":"Comma-separated list of region ids","schema":{"type":"string"}},{"name":"provinces","required":false,"in":"query","description":"Comma-separated list of province ids","schema":{"type":"string"}},{"name":"states","required":false,"in":"query","description":"Comma-separated list of state ids","schema":{"type":"string"}}],"responses":{"default":{"description":"Location grouped route list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationRegionListDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/with-polygons":{"get":{"operationId":"RouteController_getAllRoutesWithPolygons","summary":"Get all routes with their polygons for map visualization","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"List of routes with polygon data","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RouteWithPolygonDto"}}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/unassigned-points":{"get":{"operationId":"RouteController_getUnassignedPoints","summary":"Get points without an assigned route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"List of unassigned points","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetPointDto"}}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/polygon/check-overlap":{"post":{"operationId":"RouteController_checkPolygonOverlap","summary":"Check if a polygon overlaps with existing route polygons","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolygonOverlapCheckDto"}}}},"responses":{"default":{"description":"Overlap check result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolygonOverlapResultDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/reassign-points":{"post":{"operationId":"RouteController_reassignAllPoints","summary":"Reassign all points based on route polygons","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"Reassignment result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignAllPointsResultDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/zone-stats":{"get":{"operationId":"RouteController_getGlobalZoneStats","summary":"Get global zone statistics for all routes","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"Global zone statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalZoneStatsDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/polygon/preview":{"post":{"operationId":"RouteController_previewPolygonAssignment","summary":"Preview points that would be assigned to a polygon","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolygonOverlapCheckDto"}}}},"responses":{"default":{"description":"Preview result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolygonPreviewResultDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}":{"get":{"operationId":"RouteController_getRoute","summary":"List route by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRouteDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]},"patch":{"operationId":"RouteController_updateRoute","summary":"Update route by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRouteDto"}}}},"responses":{"200":{"description":""}},"tags":["Route"],"security":[{"bearer":[]}]},"delete":{"operationId":"RouteController_deleteRoute","summary":"Delete route by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"deletePoints","required":false,"in":"query","description":"Action to perform with route points: \"delete\" (remove points) or \"unassign\" (leave points without route). If omitted and route has points, will return error requiring confirmation.","schema":{"enum":["delete","unassign"],"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/user/{userId}":{"get":{"operationId":"RouteController_getLocations","summary":"Retrieves routes grouped by state, province and region for the specified userId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"treeFilter","required":true,"in":"query","description":"Flag to exclude levels from the grouped results.","schema":{"enum":["full","states","provinces"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"regions","required":false,"in":"query","description":"Comma-separated list of region ids","schema":{"type":"string"}},{"name":"provinces","required":false,"in":"query","description":"Comma-separated list of province ids","schema":{"type":"string"}},{"name":"states","required":false,"in":"query","description":"Comma-separated list of state ids","schema":{"type":"string"}}],"responses":{"default":{"description":"Routes filter by userId and grouped by location","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationRegionListDto"}}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}/polygon":{"patch":{"operationId":"RouteController_updateRoutePolygon","summary":"Update or create polygon for a route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePolygonDto"}}}},"responses":{"default":{"description":"Updated route with polygon","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteWithPolygonDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]},"delete":{"operationId":"RouteController_deleteRoutePolygon","summary":"Delete polygon from a route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}/zone-analysis":{"get":{"operationId":"RouteController_getZoneAnalysis","summary":"Get detailed zone analysis for a route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"coverageRadius","required":false,"in":"query","description":"Coverage radius per point in meters (default: 500m). Areas not covered by any point circle are marked as dead zones.","schema":{"type":"number"}}],"responses":{"default":{"description":"Zone analysis with coverage-based dead zones","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneAnalysisDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}/add-points":{"post":{"operationId":"RouteController_createPoint","summary":"Add points to a route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of points to add to the route","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreatePointDto"}}}}},"responses":{"201":{"description":""}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}/add-points-with-accounts":{"post":{"operationId":"RouteController_createPointsWithAccounts","summary":"Add points with accounts to a route (massive load)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Object with points array and accountMode option","content":{"application/json":{"schema":{"type":"object","properties":{"accountMode":{"type":"string","enum":["existing","new"],"description":"existing = use existing account if RUT found, new = always create new account"},"points":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"street":{"type":"string"},"enumeration":{"type":"string"},"neighborhood":{"type":"string"},"commercialStatus":{"type":"string"},"accountData":{"type":"object","properties":{"accountName":{"type":"string"},"accountDocument":{"type":"string"},"accountDocumentType":{"type":"string"},"accountType":{"type":"string"},"primaryContact":{"type":"object","properties":{"contactName":{"type":"string"},"contactPhone":{"type":"string"},"contactEmail":{"type":"string"}}}}}}}}}}}}},"responses":{"201":{"description":""}},"tags":["Route"],"security":[{"bearer":[]}]}},"/routes/{id}/points":{"get":{"operationId":"RouteController_getPoints","summary":"List route points","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"addressMode","required":false,"in":"query","description":"is used to indicate whether you want to obtain the list of points with one address, multiple addresses\n      or the complete list. If omitted, complete list is assumed.","schema":{"enum":["single","multiple"],"type":"string"}},{"name":"approval","required":false,"in":"query","description":"It is used to indicate whether you want to obtain the list of pending, approved or non-approved points. If omitted, the complete list is assumed.","schema":{"enum":["pending","approved","not-approved"],"type":"string"}},{"name":"sortColumn","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction (asc or desc)","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointListDto"}}}}},"tags":["Route"],"security":[{"bearer":[]}]}},"/points":{"get":{"operationId":"PointController_getPoints","summary":"List All points","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"addressMode","required":false,"in":"query","description":"is used to indicate whether you want to obtain the list of points with one address, multiple addresses\n      or the complete list. If omitted, complete list is assumed.","schema":{"enum":["single","multiple"],"type":"string"}},{"name":"approval","required":false,"in":"query","description":"It is used to indicate whether you want to obtain the list of pending, approved or non-approved points. If omitted, the complete list is assumed.","schema":{"enum":["pending","not-pending","approved","not-approved"],"type":"string"}},{"name":"stateId","required":false,"in":"query","description":"Filter by a stateId.","schema":{"type":"string"}},{"name":"sortColumn","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction (asc or desc)","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointListDto"}}}}},"tags":["Point"],"security":[{"bearer":[]}]},"post":{"operationId":"PointController_create","summary":"Create a new point (without route)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSimplePointDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPointDto"}}}}},"tags":["Point"],"security":[{"bearer":[]}]}},"/points/export/with-accounts":{"get":{"operationId":"PointController_exportPointsWithAccounts","summary":"Export all points with account information for reports","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Point"],"security":[{"bearer":[]}]}},"/points/{id}":{"get":{"operationId":"PointController_get","summary":"Get a point by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPointDto"}}}}},"tags":["Point"],"security":[{"bearer":[]}]},"delete":{"operationId":"PointController_delete","summary":"Delete a point by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Point"],"security":[{"bearer":[]}]},"patch":{"operationId":"PointController_update","summary":"Update a point","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePointDto"}}}},"responses":{"200":{"description":""}},"tags":["Point"],"security":[{"bearer":[]}]}},"/points/resolve/action":{"patch":{"operationId":"PointController_resolvePoints","summary":"Resolve points by ID(s) (approve/decline)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"action","required":true,"in":"query","description":"Action to perform on points","schema":{"enum":["approve","decline"],"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":""}},"tags":["Point"],"security":[{"bearer":[]}]}},"/points/move-to-route":{"post":{"operationId":"PointController_movePointsToRoute","summary":"Move multiple points to a different route","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pointIds":{"type":"array","items":{"type":"string"},"description":"Array of point IDs to move"},"targetRouteId":{"type":"string","description":"The destination route ID"}},"required":["pointIds","targetRouteId"]}}}},"responses":{"201":{"description":""}},"tags":["Point"],"security":[{"bearer":[]}]}},"/points/{id}/history":{"get":{"operationId":"PointController_getPointHistory","summary":"Get Point history by point ID with pagination","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"Paginated list of point history gestiones","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointHistoryListDto"}}}}},"tags":["Point"],"security":[{"bearer":[]}]}},"/addresses/{id}":{"get":{"operationId":"AddressController_get","summary":"Get an address by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAddressDto"}}}}},"tags":["Address"],"security":[{"bearer":[]}]},"patch":{"operationId":"AddressController_update","summary":"Update an address by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressDto"}}}},"responses":{"200":{"description":""}},"tags":["Address"],"security":[{"bearer":[]}]}},"/addresses/{pointId}":{"delete":{"operationId":"AddressController_delete","summary":"Delete addresses from a point by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"pointId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveAddressesDto"}}}},"responses":{"200":{"description":""}},"tags":["Address"],"security":[{"bearer":[]}]}},"/accounts":{"get":{"operationId":"AccountController_getAllAccounts","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"accountType","required":false,"in":"query","schema":{"enum":["Cliente","Proveedor","Otro"],"type":"string"}},{"name":"accountStatus","required":false,"in":"query","schema":{"enum":["active","inactive","prospect","churned"],"type":"string"}},{"name":"parentAccountId","required":false,"in":"query","description":"ID de cuenta matriz","schema":{"type":"string"}},{"name":"includeSubsidiaries","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"users","required":false,"in":"query","description":"Comma-separated list of user ids","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountListDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]},"post":{"operationId":"AccountController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountDto"}}}},"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/dashboard":{"get":{"operationId":"AccountController_getDashboardStats","summary":"Get dashboard stats for accounts (CRM view)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Buscar por nombre o documento","schema":{"type":"string"}},{"name":"accountType","required":false,"in":"query","schema":{"enum":["Cliente","Proveedor","Otro"],"type":"string"}},{"name":"accountStatus","required":false,"in":"query","schema":{"enum":["active","inactive","prospect","churned"],"type":"string"}},{"name":"parentAccountId","required":false,"in":"query","description":"ID de cuenta matriz","schema":{"type":"string"}},{"name":"includeSubsidiaries","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDashboardStatsDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/id/{id}":{"get":{"operationId":"AccountController_findOne","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/document/{document}":{"get":{"operationId":"AccountController_findByDocument","summary":"Find account by document","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"document","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/check-document/{document}":{"get":{"operationId":"AccountController_checkDocumentExists","summary":"Check if account document already exists","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"document","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}/subsidiaries":{"get":{"operationId":"AccountController_findSubsidiaries","summary":"Get all subsidiaries of an account","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetAccountDto"}}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/user":{"get":{"operationId":"AccountController_findByUserId","summary":"Returns all accounts by userId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetAccountDto"}}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}/users/{userId}":{"post":{"operationId":"AccountController_addUserToAccount","summary":"Adds a user to the account userIds array.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]},"delete":{"operationId":"AccountController_removeUserFromAccount","summary":"Removes a user from the account userIds array.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}":{"patch":{"operationId":"AccountController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]},"delete":{"operationId":"AccountController_delete","summary":"Soft delete - marks account as inactive","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}/with-points":{"delete":{"operationId":"AccountController_deleteWithPoints","summary":"Hard delete - permanently removes account and all associated points","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/export/with-points":{"get":{"operationId":"AccountController_exportAccountsWithPoints","summary":"Export all accounts with their associated points for reports","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}/points":{"get":{"operationId":"AccountController_getAccountPoints","summary":"Get all points associated with an account","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/{id}/visits":{"get":{"operationId":"AccountController_getAccountVisits","summary":"Get visit history for an account","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/bulk/validate":{"post":{"operationId":"AccountController_validateBulkImport","summary":"Fase 1: Valida archivo Excel y detecta duplicados sin importar","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkValidationResultDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/bulk/import":{"post":{"operationId":"AccountController_executeBulkImport","summary":"Fase 2: Ejecuta la importación con estrategia elegida","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportResultDto"}}}}},"tags":["Account"],"security":[{"bearer":[]}]}},"/accounts/bulk/template":{"get":{"operationId":"AccountController_downloadBulkTemplate","summary":"Descarga la plantilla Excel para carga masiva de cuentas","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Account"],"security":[{"bearer":[]}]}},"/teams":{"get":{"operationId":"TeamController_findAll","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"supervisors","required":false,"in":"query","description":"Comma-separated list of supervisor ids","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Team"],"security":[{"bearer":[]}]},"post":{"operationId":"TeamController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamDto"}}}},"responses":{"201":{"description":""}},"tags":["Team"],"security":[{"bearer":[]}]}},"/teams/{id}":{"get":{"operationId":"TeamController_findOne","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Team"],"security":[{"bearer":[]}]},"patch":{"operationId":"TeamController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"action","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamDto"}}}},"responses":{"200":{"description":""}},"tags":["Team"],"security":[{"bearer":[]}]},"delete":{"operationId":"TeamController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Team"],"security":[{"bearer":[]}]}},"/warehouses":{"get":{"operationId":"WarehouseController_getAllWarehouses","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"regions","required":false,"in":"query","description":"Comma-separated list of regions","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WarehouseListDto"}}}}},"tags":["Warehouse"],"security":[{"bearer":[]}]},"post":{"operationId":"WarehouseController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WarehouseDto"}}}},"responses":{"201":{"description":""}},"tags":["Warehouse"],"security":[{"bearer":[]}]}},"/warehouses/{id}":{"get":{"operationId":"WarehouseController_findOne","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWarehouseDto"}}}}},"tags":["Warehouse"],"security":[{"bearer":[]}]},"patch":{"operationId":"WarehouseController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WarehouseDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWarehouseDto"}}}}},"tags":["Warehouse"],"security":[{"bearer":[]}]},"delete":{"operationId":"WarehouseController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Warehouse"],"security":[{"bearer":[]}]}},"/products":{"get":{"operationId":"ProductController_getAllProducts","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","description":"Column to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (asc or desc)","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"stockTypes","required":false,"in":"query","description":"Comma-separated list of stockTypes","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListDto"}}}}},"tags":["Product"],"security":[{"bearer":[]}]},"post":{"operationId":"ProductController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"responses":{"201":{"description":""}},"tags":["Product"],"security":[{"bearer":[]}]}},"/products/{id}":{"get":{"operationId":"ProductController_findOne","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductDto"}}}}},"tags":["Product"],"security":[{"bearer":[]}]},"patch":{"operationId":"ProductController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}}},"tags":["Product"],"security":[{"bearer":[]}]},"delete":{"operationId":"ProductController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Product"],"security":[{"bearer":[]}]}},"/inventories/{id}":{"delete":{"operationId":"InventoryController_delete","summary":"Delete an inventory.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory"],"security":[{"bearer":[]}]}},"/inventories/{productId}/barcode/{barcode}":{"delete":{"operationId":"InventoryController_deleteTraceable","summary":"Delete an inventory.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"barcode","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory"],"security":[{"bearer":[]}]}},"/inventories/history/{productId}/barcode/{barcode}":{"delete":{"operationId":"InventoryController_deleteProductHistory","summary":"Delete an inventory.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"barcode","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory"],"security":[{"bearer":[]}]}},"/inventories/{productId}":{"get":{"operationId":"InventoryController_getOne","summary":"Find one product by ID and barcode if it has one","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":":productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"barcode","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}":{"post":{"operationId":"InventoryWarehouseController_addProduct","summary":"Add product to warehouse inventory","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of products to add to the warehouse inventory","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BaseInventoryDto"}}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/bulkInventoryOperationResponse"}}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/bulk":{"post":{"operationId":"InventoryWarehouseController_addBulkProduct","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"query","schema":{"type":"string"}},{"name":"packageName","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"201":{"description":""}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/product/{productId}":{"get":{"operationId":"InventoryWarehouseController_getStockByWarehouse","summary":"Show all stocks, their statuses, and user assignments for a specific product and warehouse.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductStockByWarehouse"}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/products-summary":{"get":{"operationId":"InventoryWarehouseController_warehouseProductsSummary","summary":"Displaying a summary table of products for a specific warehouse.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWarehouseProductsSummaryList"}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/product/{productId}/history":{"get":{"operationId":"InventoryWarehouseController_getProductHistoryByWarehouse","summary":"View the product history within a warehouse.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductInventoryHistoryByWarehouse"}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/product/{productId}/barcode/{barcode}/history":{"get":{"operationId":"InventoryWarehouseController_getProductHistoryByBarcode","summary":"View the product history by productId and barcode.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"barcode","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductInventoryHistoryByBarcode"}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/barcodes":{"get":{"operationId":"InventoryWarehouseController_getBarcodesByWarehouse","summary":"Retrieve barcodes for all products in a specific warehouse.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","description":"ID of the warehouse","schema":{"example":"65f1b3c64f6b345d3d7e87b0","type":"string"}}],"responses":{"200":{"description":"Returns an object where keys are productIds and values contain categorized barcodes.","content":{"application/json":{"schema":{"example":{"65f1b3c64f6b345d3d7e87b1":{"IN_WAREHOUSE":["ABC123","XYZ789"],"PENDING_ASSIGNMENT":["DEF456"],"IN_PACKAGE":[],"ACCEPTED_ASSIGNMENT":[]},"65f1b3c64f6b345d3d7e87b2":{"IN_WAREHOUSE":["LMN789"],"PENDING_ASSIGNMENT":[],"IN_PACKAGE":[],"ACCEPTED_ASSIGNMENT":[]}}}}}},"400":{"description":"Invalid warehouseId provided."},"500":{"description":"Internal server error."}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/products-in-warehouse":{"get":{"operationId":"InventoryWarehouseController_getProductsInWarehouse","summary":"Get all products in a specific warehouse with status IN_WAREHOUSE.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"List of products with detailed information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWarehouseProductsList"}}}}},"tags":["Inventory-warehouse"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/user/{userId}/assign-product":{"post":{"operationId":"InventoryUserController_assignProductToUser","summary":"Assign products from warehouse inventory to a user inventory","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of products to add to the user inventory","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BaseInventoryDto"}}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/bulkInventoryOperationResponse"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/assignment/{productId}/{action}":{"patch":{"operationId":"InventoryUserController_acceptOrRejectAssignment","summary":"Accept or reject assigned product units for a specific user and product.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"action","required":true,"in":"path","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":""}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/user/{userId}/assignment/{action}":{"post":{"operationId":"InventoryUserController_acceptOrRejectAssignedProduct","summary":"Accept or reject assigned product units for a specific user and product.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"action","required":false,"in":"path","description":"is used to indicate the response to the inventory allocation process.","schema":{"enum":["accept","reject"],"type":"string"}}],"requestBody":{"required":true,"description":"Array of user inventories to apply an assignment action (MAX 50 items)","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BaseInventoryDto"}}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/bulkInventoryOperationResponse"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/package/assignment/{action}":{"post":{"operationId":"InventoryUserController_acceptOrRejectAssignedPackage","summary":"Accept or reject assigned package units for a specific user and package","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"action","required":true,"in":"path","description":"Indicates the response to the inventory allocation process.","schema":{"enum":["accept","reject"],"type":"string"}},{"name":"packageId","required":true,"in":"query","schema":{"type":"string"}},{"name":"inventoryId","required":true,"in":"path","description":"The ID of the inventory to process.","schema":{"type":"string"}}],"responses":{"204":{"description":"The operation was successful and no content is returned."},"400":{"description":"Invalid action or input data."},"404":{"description":"Inventory not found."}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/warehouse/{warehouseId}/user/{userId}/return-product":{"post":{"operationId":"InventoryUserController_returnProductToWarehouse","summary":"Return a product from user inventory to warehouse inventory","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of user inventories to be returned","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BaseInventoryDto"}}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/bulkInventoryOperationResponse"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/product/{productId}":{"get":{"operationId":"InventoryUserController_getProductInventoryByUser","summary":"Show the stocks and their statuses for a specific user and product.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProductStockByUser"}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/inventory-summary/{userId}":{"get":{"operationId":"InventoryUserController_userInventorySummary","summary":"Sends a summary of inventory items for a specific user.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/products-summary":{"get":{"operationId":"InventoryUserController_userProductsSummary","summary":"Displaying a summary table of products for a specific user.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserProductSummary"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/package-summary":{"get":{"operationId":"InventoryUserController_userPackagesSummary","summary":"Displaying a summary table of products for a specific user.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserProductSummary"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/package-inventory":{"get":{"operationId":"InventoryUserController_userPackageInventorySummary","summary":"Display a summary of packages in inventory for a specific user.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","description":"The ID of the user whose packages in inventory are being retrieved.","schema":{"type":"string"}}],"responses":{"default":{"description":"List of package summaries in inventory.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserProductSummary"}}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/product/{productId}/history":{"get":{"operationId":"InventoryUserController_getProductHistoryByUser","summary":"View the product history for a user.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductInventoryHistoryByUser"}}}}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/inventories/user/{userId}/breaking-package/{packageId}/{toWarehouse}/{warehouseId}":{"patch":{"operationId":"InventoryUserController_moveProductsToUserInventory","summary":"Return Items to user inventory or warehouse from package on a break-package process","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","schema":{"type":"string"}},{"name":"toWarehouse","required":true,"in":"path","schema":{"type":"boolean"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Inventory-user"],"security":[{"bearer":[]}]}},"/packages/warehouse/{warehouseId}/massive":{"post":{"operationId":"PackageController_massiveLoadPackage","summary":"Create a new package","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageDto"}}}},"responses":{"200":{"description":"Package successfully created."},"400":{"description":"Invalid data provided"}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/package-type/{packageTypeId}/warehouse/{warehouseId}":{"post":{"operationId":"PackageController_createPackage","summary":"Create a new package","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageTypeId","required":true,"in":"path","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Package successfully created.","content":{"application/json":{"schema":{"example":{"packageId":"abc123"}}}}},"400":{"description":"Bad request. Could be invalid user or package type ID."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/inventories/broke":{"post":{"operationId":"PackageController_brokePackageIntoUser","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"query","schema":{"type":"string"}},{"name":"inventoryId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/broke":{"patch":{"operationId":"PackageController_serBrokePackage","summary":"Mark this package as broken; this is the end of the process","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/warehouse/{warehouseId}/return":{"post":{"operationId":"PackageController_returnPackageToWarehouse","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/warehouse/{warehouseId}/user/{userId}/assign-user":{"patch":{"operationId":"PackageController_assignPackageToUser","summary":"Assign a package to a user in a specific warehouse","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","description":"The ID of the warehouse","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","description":"The ID of the package to assign","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Package successfully assigned to the user.","content":{"application/json":{"schema":{"type":"string","example":"64abc123def456789ghi0123"}}}},"400":{"description":"Invalid input data or ID format."},"404":{"description":"No inventory found for the given warehouseId and packageId."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/user":{"get":{"operationId":"PackageController_getPackagesByUser","summary":"Get all packages by user ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Packages retrieved successfully.","content":{"application/json":{"schema":{"type":"array"}}}},"400":{"description":"Invalid user ID provided."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/warehouse/{warehouseId}/{status}":{"get":{"operationId":"PackageController_getPackagesByWarehouse","summary":"Get all packages by warehouse ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","description":"The ID of the warehouse","schema":{"type":"string"}}],"responses":{"200":{"description":"Packages retrieved successfully.","content":{"application/json":{"schema":{"type":"array"}}}},"400":{"description":"Invalid warehouse ID provided."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/products/{fastMode}":{"get":{"operationId":"PackageController_getPackageProducts","summary":"Get paginated products from a package","description":"Returns a paginated list of products within a specific package with filtering and sorting capabilities","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","description":"Package ID","schema":{"example":"507f1f77bcf86cd799439011","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 10)","schema":{"example":10,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all products without pagination","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","description":"Column to sort by (name, stockType, quantity, barcode)","schema":{"example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (asc, desc)","schema":{"example":"asc","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"fastMode","required":true,"in":"path","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Successfully retrieved package products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPackageProductsList"}}}},"404":{"description":"Package not found"}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{id}":{"get":{"operationId":"PackageController_getPackage","summary":"Get package details by ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"Package ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Package retrieved successfully."},"404":{"description":"Package not found."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{id}/warehouse/{warehouseId}/add-products":{"patch":{"operationId":"PackageController_addProducts","summary":"Add products to an existing package and update inventory","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"Package ID","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","description":"Warehouse ID where inventory will be adjusted","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"DTO containing the list of products to add","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageDto"}}}},"responses":{"200":{"description":"Products added and inventory updated successfully."},"400":{"description":"Invalid input data."},"404":{"description":"Package or warehouse not found."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/delete-products":{"patch":{"operationId":"PackageController_deleteProducts","summary":"Delete products from a package","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"Package ID","schema":{}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"Products deleted successfully."},"404":{"description":"Package not found."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/user/{userId}/products":{"delete":{"operationId":"PackageController_deleteProductsFromPackage","summary":"Delete products from a package and assign them to a user","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","description":"ID of the package","schema":{"type":"string"}},{"name":"userId","required":false,"in":"path","description":"ID of the user receiving the products (optional; if omitted, uses authenticated user)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"Products transferred successfully."},"400":{"description":"Invalid data."},"404":{"description":"Package not found."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageId}/warehouse/{warehouseId}":{"delete":{"operationId":"PackageController_deletePackage","summary":"Delete a package and restore its products to the warehouse","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"warehouseId","required":true,"in":"path","description":"The ID of the warehouse","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"path","description":"The ID of the package to delete","schema":{"type":"string"}}],"responses":{"204":{"description":"Package successfully deleted and products restored."},"400":{"description":"Invalid warehouse or package ID provided."},"404":{"description":"Package not found."}},"tags":["Package"],"security":[{"bearer":[]}]}},"/packages/{packageName}/history":{"get":{"operationId":"PackageController_getPackageHistoryByName","summary":"View the package history by package name.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"packageName","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductInventoryHistoryByBarcode"}}}}},"tags":["Package"],"security":[{"bearer":[]}]}},"/form-models":{"post":{"operationId":"FormModelController_create","summary":"Create a form model.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormModelDto"}}}},"responses":{"201":{"description":""}},"tags":["form-model"],"security":[{"bearer":[]}]}},"/form-models/{id}":{"get":{"operationId":"FormModelController_findById","summary":"Return the form model by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormModel"}}}}},"tags":["form-model"],"security":[{"bearer":[]}]},"patch":{"operationId":"FormModelController_updateFormModel","summary":"Update a form model by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormModelDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormModel"}}}}},"tags":["form-model"],"security":[{"bearer":[]}]},"delete":{"operationId":"FormModelController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["form-model"],"security":[{"bearer":[]}]}},"/form-models/{id}/states":{"get":{"operationId":"FormModelController_getStatesByUsersHierarchy","summary":"Get the possible states taking into account the users hierarchy","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormState"}}}}}},"tags":["form-model"],"security":[{"bearer":[]}]}},"/form-responses/form-model/{formModelId}":{"post":{"operationId":"FormResponseController_create","summary":"Create a form response.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormResponseDto"}}}},"responses":{"201":{"description":""}},"tags":["form-response"],"security":[{"bearer":[]}]},"get":{"operationId":"FormResponseController_findByFormModelId","summary":"Return form responses by formModelId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"default":false,"type":"string"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"populateAccount","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"populateProducts","required":false,"in":"query","description":"If true, populates package products in integrations.products","schema":{"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponsesList"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/summary/all":{"get":{"operationId":"FormResponseController_getFormsSummary","summary":"Get the paginated summary of form models.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["activo","inactivo"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetFormModelSummaryItem"}}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/without-visit/{userId}":{"get":{"operationId":"FormResponseController_findByUserId","summary":"Return form responses Without visits by userId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"creationDate","required":true,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponsesList"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/visit-completed/{visitCompletedId}":{"get":{"operationId":"FormResponseController_findByVisitCompletedId","summary":"Return form responses by visitCompletedId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"visitCompletedId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponsesList"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/form-model/{formModelId}/response/{responseId}":{"get":{"operationId":"FormResponseController_findByFormModelIdAndResponseId","summary":"Return a form response by formModelId and responseId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}},{"name":"responseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponse"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/account/{accountId}":{"get":{"operationId":"FormResponseController_findByAccountId","summary":"Return all form responses for an account (dossier)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"formModelId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponsesList"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/form-model/{formModelId}/account/{accountId}":{"get":{"operationId":"FormResponseController_findByFormModelIdAndAccountId","summary":"Return form responses by formModelId and accountId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}},{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetFormResponsesList"}}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/{id}/form-model/{formModelId}/inputs":{"patch":{"operationId":"FormResponseController_updateInputs","summary":"Update inputs by formResponseId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormResponseDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponse"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/{id}/form-model/{formModelId}/state/{stateId}":{"patch":{"operationId":"FormResponseController_updateState","summary":"Update state by formResponseId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","schema":{"type":"string"}},{"name":"stateId","required":true,"in":"path","schema":{"type":"string"}},{"name":"description","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFormResponse"}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/{id}":{"patch":{"operationId":"FormResponseController_removeProducts","summary":"Remove inventory/packages from integrations by formResponseId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"packageId","required":true,"in":"query","schema":{"type":"string"}},{"name":"productId","required":true,"in":"query","schema":{"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string"}},{"name":"barcode","required":true,"in":"query","schema":{"type":"string"}},{"name":"quantity","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["form-response"],"security":[{"bearer":[]}]},"delete":{"operationId":"FormResponseController_delete","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/{id}/state-history":{"get":{"operationId":"FormResponseController_findStateHistoriesByFormResponseId","summary":"Get state-histories by formResponseId","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetStateHistoryDto"}}}}}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/form-responses/{id}/input/{type}/{fieldId}/file/{nameFile}":{"get":{"operationId":"FormResponseController_getFile","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"type","required":true,"in":"path","schema":{"type":"string"}},{"name":"fieldId","required":true,"in":"path","schema":{"type":"string"}},{"name":"nameFile","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["form-response"],"security":[{"bearer":[]}]}},"/package-types":{"post":{"operationId":"PackageTypeController_createPackageType","summary":"Create a new package type","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePackageTypeDto"}}}},"responses":{"201":{"description":"Package type successfully created."},"400":{"description":"Invalid data provided."},"500":{"description":"Unexpected server error."}},"tags":["PackageType"],"security":[{"bearer":[]}]},"get":{"operationId":"PackageTypeController_getAllPackageTypes","summary":"Get all package types","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns a list of all package types."},"500":{"description":"Unexpected server error."}},"tags":["PackageType"],"security":[{"bearer":[]}]}},"/plans":{"get":{"operationId":"PlansController_findAll","summary":"List all plans","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanListDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]},"post":{"operationId":"PlansController_create","summary":"Create a new plan","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlanDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPlanDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]}},"/plans/active":{"get":{"operationId":"PlansController_findAllActive","summary":"List all active plans","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetPlanDto"}}}}}},"tags":["Plan"],"security":[{"bearer":[]}]}},"/plans/{id}":{"get":{"operationId":"PlansController_findOne","summary":"Get a plan by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPlanDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]},"put":{"operationId":"PlansController_update","summary":"Update a plan by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlanDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPlanDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]},"delete":{"operationId":"PlansController_delete","summary":"Delete a plan by id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Plan"],"security":[{"bearer":[]}]}},"/plans/code/{code}":{"get":{"operationId":"PlansController_findByCode","summary":"Get a plan by code","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPlanDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]}},"/plans/{id}/toggle-active":{"patch":{"operationId":"PlansController_toggleActive","summary":"Toggle plan active status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPlanDto"}}}}},"tags":["Plan"],"security":[{"bearer":[]}]}},"/plan-limits/status":{"get":{"operationId":"PlanLimitsController_getPlanLimitsStatus","summary":"Get current plan limits status for the tenant (cached)","parameters":[],"responses":{"200":{"description":"Returns the current usage and limits for the tenant plan"}},"tags":["Plan Limits"],"security":[{"bearer":[]}]}},"/plan-limits/invalidate-cache":{"post":{"operationId":"PlanLimitsController_invalidateCache","summary":"Invalidate the plan limits cache for the current tenant","parameters":[],"responses":{"200":{"description":"Cache invalidated successfully"}},"tags":["Plan Limits"],"security":[{"bearer":[]}]}},"/plan-limits/cache-stats":{"get":{"operationId":"PlanLimitsController_getCacheStats","summary":"Get cache statistics","parameters":[],"responses":{"200":{"description":"Returns cache performance statistics"}},"tags":["Plan Limits"],"security":[{"bearer":[]}]}},"/visits/completed":{"post":{"operationId":"VisitsController_createVisitCompleted","summary":"Create an unscheduled completed visit.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVisitCompletedDto"}}}},"responses":{"201":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]},"get":{"operationId":"VisitsController_getUnscheduledVisit","summary":"Retrieve all unscheduled completed visits.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitCompletedListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/scheduled":{"get":{"operationId":"VisitsController_getScheduledVisit","summary":"Retrieve all unscheduled completed visits.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitCompletedListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/scheduled/report":{"get":{"operationId":"VisitsController_getScheduledVisitReport","summary":"Reporte optimizado de visitas completadas programadas (sin JOINs, máx 31 días)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitCompletedReportListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/summary":{"get":{"operationId":"VisitsController_getVisitSummary","summary":"Get visit summary for a specific day","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"date","required":true,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VisitSummaryDto"}}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/kpi-download":{"get":{"operationId":"VisitsController_getKpiInfo","summary":"Get kpi information from a selected range of dates","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"dateFrom","required":true,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"format":"date-time","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KpiInfoDto"}}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/{id}":{"delete":{"operationId":"VisitsController_deleteCompleted","summary":"Delete completed visit by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/{id}/check-in":{"patch":{"operationId":"VisitsController_checkIn","summary":"Updates the check-in status of a completed visit by id","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckInVisitCompletedDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVisitCompletedDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/{id}/check-out":{"patch":{"operationId":"VisitsController_checkOut","summary":"Updates the check-out status and set location of a completed visit by ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckOutVisitCompletedDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVisitCompletedDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/completed/{id}/reset":{"patch":{"operationId":"VisitsController_resetCompleted","summary":"Reset a completed visit to allow re-doing it (clears responses and timestamps)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVisitCompletedDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled":{"post":{"operationId":"VisitsController_createVisitScheduled","summary":"Create a scheduled task (FORM) with corresponding completed visits if applicable.","description":"\n      Creates scheduled tasks of different types:\n\n      **FORM**: Standalone form task (no location/account)\n      - Requires: formId, userId, date\n      - Optional: timeBlock, startTime, priority, instructions\n\n      **VISIT** (default): Route visit task\n      - Requires: userId, date, and either:\n        - routeId (for full route visit)\n        - addressIds (for ad-hoc points visit)\n      - Creates VisitCompleted records for each point\n    ","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of tasks to schedule","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateVisitScheduledDto"}}}}},"responses":{"201":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]},"get":{"operationId":"VisitsController_getVisitScheduled","summary":"Retrieves all scheduled visits.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"creationDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"projectId","required":false,"in":"query","description":"Filter by project ID","schema":{"type":"string"}},{"name":"stageId","required":false,"in":"query","description":"Filter by stage ID","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitScheduledListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/user/{userId}/{date}":{"get":{"operationId":"VisitsController_getVisitScheduledByUserId","summary":"Retrieves all scheduled visits by userId and date (YYYY-MM)","description":"\n      Retrieves scheduled visits for a user in a given month.\n\n      **Modes:**\n      - `router` (default): Returns only visits for today and tomorrow (optimized for mobile router view)\n      - `calendar`: Returns all visits for the entire month (for calendar view)\n    ","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"date","required":true,"in":"path","description":"The year and month to search scheduled visits in format YYYY-MM","schema":{"type":"string"}},{"name":"mode","required":false,"in":"query","description":"Filter mode: \"router\" (today/tomorrow only) or \"calendar\" (full month). Default: \"router\"","schema":{"enum":["calendar","router"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GetVisitScheduledByUserDto"}}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/visits-completed":{"get":{"operationId":"VisitsController_getVisitCompletedByVisitScheduledId","summary":"Retrieves all completed scheduled visits by visitScheduledId.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitCompletedListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/points":{"get":{"operationId":"VisitsController_getPointsByVisitScheduledId","summary":"Retrieves all points associated with a scheduled visit through completed visits.","description":"Returns points from completed visits where addressId contains the pointId reference. Similar to GET /routes/:id/points but for scheduled visits.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PointListDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/forms":{"get":{"operationId":"VisitsController_getFormsByVisitScheduledId","summary":"Retrieves all form entries for a FORM task.","description":"Returns form entries (visitCompleted records with formId) for tasks of type FORM. Each entry represents a form to complete.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The scheduled visit ID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}":{"get":{"operationId":"VisitsController_getScheduledById","summary":"Retrieve a scheduled visit by ID.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled visit to retrieve","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVisitScheduledByUserDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]},"put":{"operationId":"VisitsController_updateScheduled","summary":"Update a scheduled visit by ID.","description":"Updates the details of a scheduled visit. Can update date, route, name, and active status. Cannot update visits scheduled before current date.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled visit to update","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVisitScheduledDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVisitScheduledByUserDto"}}}}},"tags":["Visit"],"security":[{"bearer":[]}]},"delete":{"operationId":"VisitsController_deleteScheduled","summary":"Delete scheduled visit by id.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/status":{"patch":{"operationId":"VisitsController_updateTaskStatus","summary":"Update the status of a scheduled task.","description":"\n      Updates the status of a scheduled task (FORM or VISIT).\n\n      **Valid transitions:**\n      - PENDING → IN_PROGRESS, CANCELLED\n      - IN_PROGRESS → COMPLETED, CANCELLED, PENDING\n      - COMPLETED → (no transitions allowed)\n      - CANCELLED → PENDING\n    ","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled task","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","CANCELLED"],"description":"New status for the task"}},"required":["status"]}}}},"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/start":{"patch":{"operationId":"VisitsController_startTask","summary":"Start a scheduled task (change status to IN_PROGRESS).","description":"Marks a scheduled task as started. Used by mobile app when user begins working on a task.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled task to start","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/check-in":{"patch":{"operationId":"VisitsController_checkInScheduledTask","summary":"Check-in to a scheduled task (FORM).","description":"Records the check-in time and starts the task. Similar to visit check-in but for form-based tasks.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled task","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"CheckInAt":{"type":"string","format":"date-time","description":"Check-in timestamp (ISO format)"},"latitude":{"type":"number","description":"GPS latitude at check-in (optional)"},"longitude":{"type":"number","description":"GPS longitude at check-in (optional)"}},"required":["CheckInAt"]}}}},"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/check-out":{"patch":{"operationId":"VisitsController_checkOutScheduledTask","summary":"Check-out from a scheduled task (FORM).","description":"Records the check-out time and completes the task. Similar to visit check-out but for form-based tasks.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled task","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"CheckOutAt":{"type":"string","format":"date-time","description":"Check-out timestamp (ISO format)"},"latitude":{"type":"number","description":"GPS latitude at check-out (optional)"},"longitude":{"type":"number","description":"GPS longitude at check-out (optional)"},"formResponseId":{"type":"string","description":"ID of the form response created (optional)"}},"required":["CheckOutAt"]}}}},"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/scheduled/{id}/complete":{"patch":{"operationId":"VisitsController_completeTask","summary":"Complete a scheduled task.","description":"\n      Marks a scheduled task as completed and creates the corresponding VisitCompleted record.\n\n      For FORM tasks:\n      - Creates a VisitCompleted with the task details\n      - No pointId is required\n\n      For VISIT tasks:\n      - The visit should already have VisitCompleted records from check-in/check-out flow\n    ","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","description":"The ID of the scheduled task to complete","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number","description":"GPS latitude where task was completed (optional)"},"longitude":{"type":"number","description":"GPS longitude where task was completed (optional)"}}}}}},"responses":{"200":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/visits/tasks/completed":{"post":{"operationId":"VisitsController_createTaskCompleted","summary":"Create a completed task record for FORM tasks.","description":"Creates a VisitCompleted record for non-visit tasks. Used by mobile app when completing form-based tasks.","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTaskCompletedDto"}}}},"responses":{"201":{"description":""}},"tags":["Visit"],"security":[{"bearer":[]}]}},"/dashboards/charts-data/form-model/{formModelId}":{"get":{"operationId":"DashboardController_chartData","summary":"Return charts data","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"formModelId","required":true,"in":"path","description":"Form model ID","schema":{"type":"string"}},{"name":"month","required":true,"in":"query","description":"Month","schema":{"type":"number"}},{"name":"year","required":true,"in":"query","description":"Year","schema":{"type":"number"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStatsDto"}}}}},"tags":["dashboard"],"security":[{"bearer":[]}]}},"/dashboards/traffic":{"get":{"operationId":"DashboardController_getActivity","summary":"Return traffic data","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"year","required":true,"in":"query","description":"Year","schema":{"type":"number"}},{"name":"month","required":true,"in":"query","description":"Month","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["dashboard"],"security":[{"bearer":[]}]}},"/dashboards/traffic/forms":{"get":{"operationId":"DashboardController_getFormActivity","summary":"Return traffic data from formResponses","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"year","required":true,"in":"query","description":"Year","schema":{"type":"number"}},{"name":"month","required":true,"in":"query","description":"Month","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["dashboard"],"security":[{"bearer":[]}]}},"/dashboards/traffic/users":{"get":{"operationId":"DashboardController_getUserActivity","summary":"Return traffic data from formResponses","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"year","required":true,"in":"query","description":"Year","schema":{"type":"number"}},{"name":"month","required":true,"in":"query","description":"Month","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["dashboard"],"security":[{"bearer":[]}]}},"/promos/product/{productId}":{"get":{"operationId":"PromosController_getAll","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]}},"/promos/{id}":{"get":{"operationId":"PromosController_getOnePromo","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]},"patch":{"operationId":"PromosController_update","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoDto"}}}},"responses":{"200":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]}},"/promos/priority/{productId}":{"get":{"operationId":"PromosController_getHighestWeightPromo","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]}},"/promos":{"post":{"operationId":"PromosController_create","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoDto"}}}},"responses":{"201":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]}},"/promos/{id}/toggle-active":{"patch":{"operationId":"PromosController_toggleActive","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Promo"],"security":[{"bearer":[]}]}},"/settings":{"get":{"operationId":"SettingsController_getSettings","summary":"Obtener configuraciones globales de la aplicación","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Configuraciones obtenidas exitosamente"}},"tags":["Settings"],"security":[{"bearer":[]}]},"post":{"operationId":"SettingsController_createSettings","summary":"Crear configuraciones globales (solo si no existen)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsDto"}}}},"responses":{"201":{"description":"Configuraciones creadas exitosamente"},"400":{"description":"Las configuraciones ya existen"}},"tags":["Settings"],"security":[{"bearer":[]}]}},"/settings/global":{"put":{"operationId":"SettingsController_updateSettings","summary":"Actualizar configuraciones globales de la aplicación","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsDto"}}}},"responses":{"200":{"description":"Configuraciones actualizadas exitosamente"}},"tags":["Settings"],"security":[{"bearer":[]}]}},"/settings/reset":{"post":{"operationId":"SettingsController_resetSettings","summary":"Resetear configuraciones a valores por defecto","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Configuraciones reseteadas exitosamente"}},"tags":["Settings"],"security":[{"bearer":[]}]}},"/settings/logos":{"post":{"operationId":"SettingsController_uploadLogos","summary":"Subir ambos logos en una sola petición","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Settings"],"security":[{"bearer":[]}]}},"/gps-tracking/active-locations":{"get":{"operationId":"GPSTrackingController_getActiveLocations","summary":"Obtener ubicaciones de usuarios activos","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userIds","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveUserLocationDto"}}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/current-location":{"get":{"operationId":"GPSTrackingController_getUserCurrentLocation","summary":"Obtener ubicación actual de un usuario","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveUserLocationDto"}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/route/{date}":{"get":{"operationId":"GPSTrackingController_getUserDailyRoute","summary":"Obtener recorrido diario de un usuario","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"date","required":true,"in":"path","schema":{"type":"string"}},{"name":"simplified","required":false,"in":"query","description":"Simplificar ruta para renderizado","schema":{"default":false,"type":"boolean"}},{"name":"tolerance","required":false,"in":"query","description":"Tolerancia para simplificación en metros","schema":{"default":10,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPSTrackingHistory"}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/routes":{"get":{"operationId":"GPSTrackingController_getUserRouteHistory","summary":"Obtener historial de rutas de un usuario","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","description":"Fecha de inicio (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","description":"Fecha de fin (YYYY-MM-DD)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DailyRouteSummaryDto"}}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/stats/{date}":{"get":{"operationId":"GPSTrackingController_getDailyStats","summary":"Obtener estadísticas de ruta de un día","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"date","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteStatsDto"}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/batch":{"post":{"operationId":"GPSTrackingController_syncOfflineLocations","summary":"Sincronizar puntos GPS offline","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/gps-tracking/users/{userId}/close-session/{date}":{"post":{"operationId":"GPSTrackingController_closeDailySession","summary":"Cerrar sesión de tracking y calcular estadísticas","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"date","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteStatsDto"}}}}},"tags":["GPS Tracking"],"security":[{"bearer":[]}]}},"/projects":{"get":{"operationId":"ProjectController_findAll","summary":"List all projects","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"ownerId","required":false,"in":"query","schema":{"type":"string"}},{"name":"teamId","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortColumn","required":false,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["asc","desc"],"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["DRAFT","ACTIVE","PAUSED","COMPLETED","CANCELLED"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"post":{"operationId":"ProjectController_create","summary":"Create a new project","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}":{"get":{"operationId":"ProjectController_findById","summary":"Get project by ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"patch":{"operationId":"ProjectController_update","summary":"Update a project","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"delete":{"operationId":"ProjectController_delete","summary":"Delete a project (soft delete)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/stages":{"get":{"operationId":"ProjectController_getStages","summary":"Get project stages","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStageDto"}}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"post":{"operationId":"ProjectController_createStage","summary":"Create a new stage","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStageDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStageDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/stages/{stageId}":{"patch":{"operationId":"ProjectController_updateStage","summary":"Update a stage","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"stageId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStageDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStageDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"delete":{"operationId":"ProjectController_deleteStage","summary":"Delete a stage (soft delete)","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"stageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/stages/reorder":{"patch":{"operationId":"ProjectController_reorderStages","summary":"Reorder project stages","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderStagesDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStageDto"}}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/tasks":{"get":{"operationId":"ProjectController_getProjectTasks","summary":"Get project tasks","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}},{"name":"stageId","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["PENDING","IN_PROGRESS","COMPLETED","CANCELLED"],"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Project"],"security":[{"bearer":[]}]},"post":{"operationId":"ProjectController_createProjectTask","summary":"Create a task in project","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectTaskDto"}}}},"responses":{"201":{"description":""}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/gantt":{"get":{"operationId":"ProjectController_getGanttData","summary":"Get project Gantt data","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"startDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"zoom","required":false,"in":"query","schema":{"enum":["day","week","month"],"type":"string"}},{"name":"dimension","required":false,"in":"query","schema":{"enum":["user","task"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GanttDataDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/timeline":{"get":{"operationId":"ProjectController_getTimelineData","summary":"Get project Timeline data","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"startDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"interval","required":false,"in":"query","schema":{"enum":["day","week","month","quarter"],"type":"string"}},{"name":"dimension","required":false,"in":"query","schema":{"enum":["user","task"],"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineDataDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/{id}/progress":{"get":{"operationId":"ProjectController_getProjectProgress","summary":"Get project progress statistics","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectProgressDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/templates/all":{"get":{"operationId":"ProjectController_getTemplates","summary":"Get all project templates","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTemplateListDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/templates/{templateId}":{"get":{"operationId":"ProjectController_getTemplate","summary":"Get template by ID","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"templateId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTemplateDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"patch":{"operationId":"ProjectController_updateTemplate","summary":"Update a template","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"templateId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectTemplateDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTemplateDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]},"delete":{"operationId":"ProjectController_deleteTemplate","summary":"Delete a template","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}},{"name":"templateId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Project"],"security":[{"bearer":[]}]}},"/projects/templates":{"post":{"operationId":"ProjectController_createTemplate","summary":"Create a custom template","parameters":[{"name":"x-tenant-id","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectTemplateDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectTemplateDto"}}}}},"tags":["Project"],"security":[{"bearer":[]}]}}},"info":{"title":"Dgenius_Platform","description":"### Authentication\n\nNotes about authentication soon...\n\n### Success responses\nHTTP status = 2xx\n\n```\n{\n  data: { ... }\n}\n```\n\nby convention for paginated endpoint:\n\n```\n{\n  data: { items: [], meta: { count, limit, offset } }\n}\n```\n\n### Error responses\n\nHTTP status = 4xx/5xx\n\n```\n{\n  error: {\n    message: 'Error message',\n    reasons: [\n      { path: '<field_path>', message: 'Field error message', reason: '<reasonCode>' },\n      ...\n    ],\n    severity: 'error' | 'warning',\n    type: 'authentication' | 'validation' | 'internal',\n  } \n}\n```\n\n* status 401 - type = 'authentication'\n* status 400 - type = 'validation'\n* status 5xx - type = 'internal'","version":"2.0.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"UpdateNotificationRuleDto":{"type":"object","properties":{}},"RegisterDeviceTokenDto":{"type":"object","properties":{}},"TenantListDto":{"type":"object","properties":{}},"StatusCountsDto":{"type":"object","properties":{"active":{"type":"number","example":15},"trial":{"type":"number","example":3},"suspended":{"type":"number","example":1}},"required":["active","trial","suspended"]},"TenantSummaryDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"subdomain":{"type":"string"},"status":{"type":"string","enum":["active","suspended","trial"]},"planName":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","subdomain","status","planName","createdAt","updatedAt"]},"DashboardStatsDto":{"type":"object","properties":{"totalTenants":{"type":"number","example":24},"statusCounts":{"$ref":"#/components/schemas/StatusCountsDto"},"totalPlans":{"type":"number","example":5},"activePlans":{"type":"number","example":3},"recentTenants":{"type":"array","items":{"$ref":"#/components/schemas/TenantSummaryDto"}}},"required":["totalTenants","statusCounts","totalPlans","activePlans","recentTenants"]},"ActiveModulesDto":{"type":"object","properties":{"products":{"type":"boolean","example":true},"routes":{"type":"boolean","example":true},"accounts":{"type":"boolean","example":true}},"required":["products","routes","accounts"]},"CreateTenantDto":{"type":"object","properties":{"name":{"type":"string"},"subdomain":{"type":"string"},"adminName":{"type":"string"},"adminEmail":{"type":"string"},"adminPhone":{"type":"string"},"adminPassword":{"type":"string"},"adminDocument":{"type":"string"},"parentCluster":{"type":"string"},"clusterType":{"type":"string","enum":["dedicated","shared"],"default":"dedicated"},"planId":{"type":"object","description":"ID del plan asignado"},"activeModules":{"$ref":"#/components/schemas/ActiveModulesDto"},"billingEmails":{"example":["billing@example.com"],"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["active","suspended","trial"],"default":"trial"},"trialEndsAt":{"format":"date-time","type":"string"},"billingStartDate":{"format":"date-time","type":"string","description":"Fecha de inicio para el cálculo del período de facturación"}},"required":["name","subdomain","adminName","adminEmail","adminPhone","adminPassword","adminDocument","parentCluster","clusterType"]},"UsageLimitDetail":{"type":"object","properties":{"current":{"type":"number","example":5},"max":{"type":"number","example":10},"percentage":{"type":"number","example":50}},"required":["current","max","percentage"]},"TenantUsageDto":{"type":"object","properties":{"forms":{"$ref":"#/components/schemas/UsageLimitDetail"},"responses":{"$ref":"#/components/schemas/UsageLimitDetail"},"users":{"$ref":"#/components/schemas/UsageLimitDetail"},"planName":{"type":"object","example":"Professional"},"hasPlan":{"type":"boolean","example":true},"billingPeriodStart":{"format":"date-time","type":"string","example":"2026-01-15"},"billingPeriodEnd":{"format":"date-time","type":"string","example":"2026-02-14"}},"required":["forms","responses","users","planName","hasPlan","billingPeriodStart","billingPeriodEnd"]},"GetTenantDto":{"type":"object","properties":{"name":{"type":"string"},"subdomain":{"type":"string"},"adminName":{"type":"string"},"adminEmail":{"type":"string"},"adminPhone":{"type":"string"},"adminPassword":{"type":"string"},"adminDocument":{"type":"string"},"parentCluster":{"type":"string"},"clusterType":{"type":"string","enum":["dedicated","shared"],"default":"dedicated"},"planId":{"type":"object","description":"ID del plan asignado"},"activeModules":{"$ref":"#/components/schemas/ActiveModulesDto"},"billingEmails":{"example":["billing@example.com"],"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["active","suspended","trial"],"default":"trial"},"trialEndsAt":{"format":"date-time","type":"string"},"billingStartDate":{"format":"date-time","type":"string","description":"Fecha de inicio para el cálculo del período de facturación"}},"required":["name","subdomain","adminName","adminEmail","adminPhone","adminPassword","adminDocument","parentCluster","clusterType"]},"UpdateTenantModulesDto":{"type":"object","properties":{"activeModules":{"$ref":"#/components/schemas/ActiveModulesDto"}},"required":["activeModules"]},"UpdateTenantBillingEmailsDto":{"type":"object","properties":{"billingEmails":{"example":["billing@example.com","admin@example.com"],"type":"array","items":{"type":"string"}}},"required":["billingEmails"]},"UpdateTenantStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","suspended","trial"]}},"required":["status"]},"UpdateTenantPlanDto":{"type":"object","properties":{"planId":{"type":"string","description":"ID del plan a asignar"}},"required":["planId"]},"UpdateTenantBillingStartDateDto":{"type":"object","properties":{"billingStartDate":{"format":"date-time","type":"string","description":"Fecha de inicio del período de facturación"}},"required":["billingStartDate"]},"Status":{"type":"object","properties":{"status":{"type":"string","example":"OK","description":"Status Response"}},"required":["status"]},"WorkDaysDto":{"type":"object","properties":{"dayName":{"type":"string","enum":["lunes","martes","miercoles","jueves","viernes","sabado","domingo"]},"isWorkday":{"type":"boolean"}},"required":["dayName","isWorkday"]},"PermissionDto":{"type":"object","properties":{"moduleName":{"type":"string","enum":["MODULE_ROLES","MODULE_USERS","MODULE_PRODUCTS","MODULE_WAREHOUSES","MODULE_STOCK","MODULE_INVENTORY","MODULE_ROUTES","MODULE_REPORTS","MODULE_TEAMS","MODULE_DYNAMIC_FORMS","MODULE_SETTINGS","MODULE_ACCOUNTS","MODULE_PROJECTS"]},"name":{"type":"string","enum":["view_role","create_role","edit_role","delete_role","view_team","create_team","edit_team","delete_team","view_user","create_user","edit_user","delete_user","edit_route_permissions_user","edit_program_user","view_product","create_product","edit_product","delete_product","view_warehouse","create_warehouse","edit_warehouse","delete_warehouse","view_stock","load_stock","load_stock_bulk","move_stock","move_stock_bulk","stock_operation","accept_reject_stock","view_inventory","delete_inventory","view_route","create_route","edit_route","delete_route","create_point","edit_point","view_route_points","approve_point","delete_point","update_address","delete_address","get_address","view_visit_router","off_route_visit","view_account","create_account","edit_account","delete_account","assign_account","bulk_import_account","map_visit_reports","download_reports","view_form","create_form","edit_form","delete_form","new_form_response","view_form_response","edit_form_response","delete_form_response","status_form_responses","view_settings","edit_settings","view_project","create_project","edit_project","delete_project","view_project_gantt","view_project_timeline","manage_project_tasks","manage_project_stages","manage_task_blocks","manage_project_templates"]},"description":{"type":"string"},"isEnabled":{"type":"boolean"}},"required":["moduleName","name","description","isEnabled"]},"GetRoleDto":{"type":"object","properties":{"hierarchy":{"type":"string","enum":["ADMINISTRATOR","BACKOFFICE","SUPERVISOR","EXECUTIVE"]},"name":{"type":"string"},"workdays":{"type":"array","items":{"$ref":"#/components/schemas/WorkDaysDto"}},"workStartTime":{"type":"string"},"workEndTime":{"type":"string"},"baseSalary":{"type":"number"},"isActive":{"type":"boolean"},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/PermissionDto"}},"id":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["hierarchy","name","workdays","workStartTime","workEndTime","baseSalary","isActive","permissions","id","createdAt","updatedAt"]},"PaginationMeta":{"type":"object","properties":{"limit":{"type":"number","example":1},"page":{"type":"object","example":1},"totalItems":{"type":"number","example":1},"totalPages":{"type":"number","example":1}},"required":["limit","page","totalItems","totalPages"]},"GetRoleListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetRoleDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"CreateRoleDto":{"type":"object","properties":{"hierarchy":{"type":"string","enum":["ADMINISTRATOR","BACKOFFICE","SUPERVISOR","EXECUTIVE"]},"name":{"type":"string"},"workdays":{"type":"array","items":{"$ref":"#/components/schemas/WorkDaysDto"}},"workStartTime":{"type":"string"},"workEndTime":{"type":"string"},"baseSalary":{"type":"number"},"isActive":{"type":"boolean"},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/PermissionDto"}}},"required":["hierarchy","name","workdays","workStartTime","workEndTime","baseSalary","isActive","permissions"]},"UpdateRolePermissionsDto":{"type":"object","properties":{"permissions":{"type":"array","items":{"$ref":"#/components/schemas/PermissionDto"}}},"required":["permissions"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string","description":"The email of the user","example":"user@example.com"},"password":{"type":"string","description":"The password of the user","example":"password123"}},"required":["email","password"]},"GetUserDto":{"type":"object","properties":{"roleId":{"type":"string"},"name":{"type":"string"},"documentId":{"type":"string"},"email":{"type":"string"},"isActive":{"type":"boolean"},"region":{"type":"string"},"phone":{"type":"string"},"profileImage":{"type":"string"},"id":{"type":"string"},"supervisor":{"type":"string"},"roleName":{"type":"string"},"hierarchy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["roleId","name","documentId","email","isActive","region","phone","profileImage","id","supervisor","roleName","hierarchy","createdAt","updatedAt"]},"UserListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetUserDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"CreateUserDto":{"type":"object","properties":{"roleId":{"type":"string"},"name":{"type":"string"},"documentId":{"type":"string"},"email":{"type":"string"},"isActive":{"type":"boolean"},"region":{"type":"string"},"phone":{"type":"string"},"profileImage":{"type":"string"}},"required":["roleId","name","documentId","email","isActive","region","phone","profileImage"]},"AssignPermissionForRouteDto":{"type":"object","properties":{"assignRoutesId":{"type":"array","items":{"type":"string"}},"unassignRoutesId":{"type":"array","items":{"type":"string"}}},"required":["assignRoutesId","unassignRoutesId"]},"LocationRouteDto":{"type":"object","properties":{"id":{"type":"string"},"stateId":{"type":"string"},"name":{"type":"string"}},"required":["id","stateId","name"]},"LocationStateDto":{"type":"object","properties":{"id":{"type":"string"},"provinceId":{"type":"string"},"name":{"type":"string"},"routes":{"type":"array","items":{"$ref":"#/components/schemas/LocationRouteDto"}}},"required":["id","provinceId","name","routes"]},"LocationProvinceDto":{"type":"object","properties":{"id":{"type":"string"},"regionId":{"type":"string"},"name":{"type":"string"},"states":{"type":"array","items":{"$ref":"#/components/schemas/LocationStateDto"}}},"required":["id","regionId","name","states"]},"LocationRegionDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"provinces":{"type":"array","items":{"$ref":"#/components/schemas/LocationProvinceDto"}}},"required":["id","name","provinces"]},"GetRegion":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"GetRegionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetRegion"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetProvince":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"GetProvinceList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetProvince"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetState":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"GetStateList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetState"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetRouteDto":{"type":"object","properties":{"name":{"type":"string"},"stateId":{"type":"string"},"routeType":{"type":"string","enum":["OPENING","VEGETATIVE","CAMPAIGN"]},"description":{"type":"string"},"isActive":{"type":"boolean"},"autoApprove":{"type":"boolean"},"id":{"type":"string"},"approvedPoints":{"type":"number"},"totalPoints":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["name","stateId","routeType","isActive","autoApprove","id","approvedPoints","totalPoints","createdAt","updatedAt"]},"RouteListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetRouteDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"LocationRegionListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LocationRegionDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"CreateRouteDto":{"type":"object","properties":{"name":{"type":"string"},"stateId":{"type":"string"},"routeType":{"type":"string","enum":["OPENING","VEGETATIVE","CAMPAIGN"]},"description":{"type":"string"},"isActive":{"type":"boolean"},"autoApprove":{"type":"boolean"}},"required":["name","stateId","routeType","isActive","autoApprove"]},"RouteWithPolygonDto":{"type":"object","properties":{"name":{"type":"string"},"stateId":{"type":"string"},"routeType":{"type":"string","enum":["OPENING","VEGETATIVE","CAMPAIGN"]},"description":{"type":"string"},"isActive":{"type":"boolean"},"autoApprove":{"type":"boolean"},"id":{"type":"string"},"approvedPoints":{"type":"number"},"totalPoints":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"polygon":{"nullable":true,"description":"Polygon coordinates as [lat, lng] arrays","items":{"type":"array"},"type":"array"},"polygonColor":{"type":"object","nullable":true,"description":"Hex color for the polygon"}},"required":["name","stateId","routeType","isActive","autoApprove","id","approvedPoints","totalPoints","createdAt","updatedAt","polygon","polygonColor"]},"CreateAddressDto":{"type":"object","properties":{"pointId":{"type":"string"},"name":{"type":"string"},"clientName":{"type":"string"},"clientDocument":{"type":"string","description":"must be a RUT with valid format"},"addressNumber":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"email":{"type":"string"},"comments":{"type":"string"}},"required":["pointId","name","clientName","clientDocument"]},"GetPointDto":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["punto de venta","casa","edificio","condominio","local comercial","street center","bodega","Oficina","Sucursal","Punto de Venta","Bodega"]},"category":{"type":"string","enum":["domicilio","oficina","punto de venta","Principal","Secundario","Temporal","agencia de polla y azar","almacen de barrio","botillerias","centros de pago","estacion de servicios","farmacias","internet / centro de llamados","kioscos","librerias","minimarket","supermercado","otros","panaderia","artículos electrónicos / telefonia / accesorios","tienda especialista","verduleria","restaurante","servicio tecnico"]},"subcategory":{"type":"string"},"neighborhood":{"type":"string"},"commercialStatus":{"type":"string"},"street":{"type":"string"},"enumeration":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"addresses":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateAddressDto"}},"approved":{"type":"boolean"},"isActive":{"type":"boolean"},"correlative":{"type":"number","description":"Número correlativo generado automáticamente"},"accountId":{"type":"string","description":"ID de la cuenta (Account) asociada al punto"},"id":{"type":"string"},"stateId":{"type":"string"},"routeId":{"type":"string"},"routeName":{"type":"string"},"user":{"type":"object"},"supervisor":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"clientName":{"type":"string","description":"Nombre del cliente (de Account o Address)"},"clientDocument":{"type":"string","description":"Documento del cliente (de Account o Address)"},"clientPhone":{"type":"string","description":"Teléfono del cliente"},"clientEmail":{"type":"string","description":"Email del cliente"}},"required":["name","type","category","latitude","longitude","addresses","approved","isActive","id","stateId","routeId","routeName","user","supervisor","createdAt","updatedAt"]},"CoordinateDto":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude","example":-33.4489},"lng":{"type":"number","description":"Longitude","example":-70.6693}},"required":["lat","lng"]},"PolygonOverlapCheckDto":{"type":"object","properties":{"polygon":{"description":"Array of coordinates to check for overlap","type":"array","items":{"$ref":"#/components/schemas/CoordinateDto"}},"excludeRouteId":{"type":"string","description":"Route ID to exclude from overlap check (for editing)"}},"required":["polygon"]},"OverlappingRouteDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"PolygonOverlapResultDto":{"type":"object","properties":{"overlaps":{"type":"boolean","description":"Whether the polygon overlaps with existing polygons"},"overlappingRoutes":{"description":"List of routes that overlap","type":"array","items":{"$ref":"#/components/schemas/OverlappingRouteDto"}}},"required":["overlaps","overlappingRoutes"]},"ReassignAllPointsResultDto":{"type":"object","properties":{"totalProcessed":{"type":"number","description":"Total points processed"},"assignedPerRoute":{"type":"object","description":"Points assigned per route"},"unassigned":{"type":"number","description":"Number of points without a route"}},"required":["totalProcessed","assignedPerRoute","unassigned"]},"ZoneStatsDto":{"type":"object","properties":{"routeId":{"type":"string","description":"Route ID"},"routeName":{"type":"string","description":"Route name"},"pointCount":{"type":"number","description":"Point count"},"area":{"type":"number","description":"Area in km²"},"density":{"type":"number","description":"Point density (points per km²)"},"hasPolygon":{"type":"boolean","description":"Whether route has polygon"},"polygonColor":{"type":"object","description":"Polygon color","nullable":true}},"required":["routeId","routeName","pointCount","area","density","hasPolygon","polygonColor"]},"GlobalZoneStatsDto":{"type":"object","properties":{"totalRoutes":{"type":"number","description":"Total routes"},"routesWithPolygons":{"type":"number","description":"Routes with polygons"},"routesWithoutPolygons":{"type":"number","description":"Routes without polygons"},"totalPoints":{"type":"number","description":"Total points"},"assignedPoints":{"type":"number","description":"Assigned points"},"unassignedPoints":{"type":"number","description":"Unassigned points"},"totalArea":{"type":"number","description":"Total covered area in km²"},"avgPointDensity":{"type":"number","description":"Average point density"},"routeStats":{"description":"Statistics per route","type":"array","items":{"$ref":"#/components/schemas/ZoneStatsDto"}}},"required":["totalRoutes","routesWithPolygons","routesWithoutPolygons","totalPoints","assignedPoints","unassignedPoints","totalArea","avgPointDensity","routeStats"]},"PolygonPreviewResultDto":{"type":"object","properties":{"pointsInPolygon":{"type":"number","description":"Points inside the polygon"},"pointsAlreadyAssigned":{"type":"number","description":"Points already assigned to other routes"},"pointsToAssign":{"type":"number","description":"Points that would be assigned"}},"required":["pointsInPolygon","pointsAlreadyAssigned","pointsToAssign"]},"UpdateRouteDto":{"type":"object","properties":{"name":{"type":"string"},"stateId":{"type":"string"},"routeType":{"type":"string","enum":["OPENING","VEGETATIVE","CAMPAIGN"]},"description":{"type":"string"},"isActive":{"type":"boolean"},"autoApprove":{"type":"boolean"}}},"UpdatePolygonDto":{"type":"object","properties":{"polygon":{"description":"Array of coordinates forming the polygon (minimum 3 points)","type":"array","items":{"$ref":"#/components/schemas/CoordinateDto"}},"color":{"type":"string","description":"Hex color for the polygon","example":"#174dff"}},"required":["polygon"]},"ZoneAnalysisStatsDto":{"type":"object","properties":{"totalPoints":{"type":"number","description":"Total points in zone"},"approvedPoints":{"type":"number","description":"Approved points"},"pendingPoints":{"type":"number","description":"Pending points"},"area":{"type":"number","description":"Area in km²"},"pointDensity":{"type":"number","description":"Point density (points per km²)"},"balanceScore":{"type":"number","description":"Balance score (0-100)"}},"required":["totalPoints","approvedPoints","pendingPoints","area","pointDensity","balanceScore"]},"ClusterDto":{"type":"object","properties":{"id":{"type":"string","description":"Cluster ID"},"center":{"description":"Center coordinates","allOf":[{"$ref":"#/components/schemas/CoordinateDto"}]},"pointCount":{"type":"number","description":"Number of points in cluster"},"radius":{"type":"number","description":"Radius of cluster in km"},"density":{"type":"number","description":"Point density (points per km²)"}},"required":["id","center","pointCount","radius","density"]},"DeadZoneBoundsDto":{"type":"object","properties":{"north":{"type":"number","description":"North boundary"},"south":{"type":"number","description":"South boundary"},"east":{"type":"number","description":"East boundary"},"west":{"type":"number","description":"West boundary"}},"required":["north","south","east","west"]},"DeadZoneCellDto":{"type":"object","properties":{"lat":{"type":"number","description":"Cell center latitude"},"lng":{"type":"number","description":"Cell center longitude"},"sizeLat":{"type":"number","description":"Cell size in latitude degrees"},"sizeLng":{"type":"number","description":"Cell size in longitude degrees"}},"required":["lat","lng","sizeLat","sizeLng"]},"DeadZoneDto":{"type":"object","properties":{"id":{"type":"string","description":"Dead zone ID"},"center":{"description":"Center coordinates","allOf":[{"$ref":"#/components/schemas/CoordinateDto"}]},"area":{"type":"number","description":"Area in km²"},"bounds":{"description":"Boundary coordinates","allOf":[{"$ref":"#/components/schemas/DeadZoneBoundsDto"}]},"cells":{"description":"Individual cells that make up this dead zone","type":"array","items":{"$ref":"#/components/schemas/DeadZoneCellDto"}}},"required":["id","center","area","bounds","cells"]},"PointsByDimensionDto":{"type":"object","properties":{"dimension":{"type":"string","description":"Dimension name (category, type, etc.)"},"total":{"type":"number","description":"Total points"},"approved":{"type":"number","description":"Approved points"},"pending":{"type":"number","description":"Pending points"},"percentage":{"type":"number","description":"Percentage of total"}},"required":["dimension","total","approved","pending","percentage"]},"ZoneAnalysisDto":{"type":"object","properties":{"routeId":{"type":"string","description":"Route ID"},"routeName":{"type":"string","description":"Route name"},"stats":{"description":"Zone statistics","allOf":[{"$ref":"#/components/schemas/ZoneAnalysisStatsDto"}]},"center":{"description":"Zone center coordinates","allOf":[{"$ref":"#/components/schemas/CoordinateDto"}]},"clusters":{"description":"Point clusters","type":"array","items":{"$ref":"#/components/schemas/ClusterDto"}},"deadZones":{"description":"Dead zones without points","type":"array","items":{"$ref":"#/components/schemas/DeadZoneDto"}},"pointsByCategory":{"description":"Points by category","type":"array","items":{"$ref":"#/components/schemas/PointsByDimensionDto"}},"pointsByType":{"description":"Points by type","type":"array","items":{"$ref":"#/components/schemas/PointsByDimensionDto"}}},"required":["routeId","routeName","stats","center","clusters","deadZones","pointsByCategory","pointsByType"]},"CreatePointDto":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["punto de venta","casa","edificio","condominio","local comercial","street center","bodega","Oficina","Sucursal","Punto de Venta","Bodega"]},"category":{"type":"string","enum":["domicilio","oficina","punto de venta","Principal","Secundario","Temporal","agencia de polla y azar","almacen de barrio","botillerias","centros de pago","estacion de servicios","farmacias","internet / centro de llamados","kioscos","librerias","minimarket","supermercado","otros","panaderia","artículos electrónicos / telefonia / accesorios","tienda especialista","verduleria","restaurante","servicio tecnico"]},"subcategory":{"type":"string"},"neighborhood":{"type":"string"},"commercialStatus":{"type":"string"},"street":{"type":"string"},"enumeration":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"addresses":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateAddressDto"}},"approved":{"type":"boolean"},"isActive":{"type":"boolean"},"correlative":{"type":"number","description":"Número correlativo generado automáticamente"},"accountId":{"type":"string","description":"ID de la cuenta (Account) asociada al punto"}},"required":["name","type","category","latitude","longitude","addresses","approved","isActive"]},"PointListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetPointDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"CreateSimplePointDto":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["punto de venta","casa","edificio","condominio","local comercial","street center","bodega","Oficina","Sucursal","Punto de Venta","Bodega"]},"category":{"type":"string","enum":["domicilio","oficina","punto de venta","Principal","Secundario","Temporal","agencia de polla y azar","almacen de barrio","botillerias","centros de pago","estacion de servicios","farmacias","internet / centro de llamados","kioscos","librerias","minimarket","supermercado","otros","panaderia","artículos electrónicos / telefonia / accesorios","tienda especialista","verduleria","restaurante","servicio tecnico"]},"subcategory":{"type":"string"},"neighborhood":{"type":"string"},"commercialStatus":{"type":"string"},"street":{"type":"string"},"enumeration":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"isActive":{"type":"boolean","default":true},"accountId":{"type":"string","description":"ID de la cuenta (Account) asociada al punto"}},"required":["name","type","category","latitude","longitude"]},"UpdatePointDto":{"type":"object","properties":{"routeId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["punto de venta","casa","edificio","condominio","local comercial","street center","bodega","Oficina","Sucursal","Punto de Venta","Bodega"]},"category":{"type":"string","enum":["domicilio","oficina","punto de venta","Principal","Secundario","Temporal","agencia de polla y azar","almacen de barrio","botillerias","centros de pago","estacion de servicios","farmacias","internet / centro de llamados","kioscos","librerias","minimarket","supermercado","otros","panaderia","artículos electrónicos / telefonia / accesorios","tienda especialista","verduleria","restaurante","servicio tecnico"]},"subcategory":{"type":"string"},"neighborhood":{"type":"string"},"commercialStatus":{"type":"string"},"street":{"type":"string"},"apartmentNumber":{"type":"string"},"enumeration":{"type":"string"},"addressesNumber":{"type":"number"},"latitude":{"type":"number"},"longitude":{"type":"number"},"approved":{"type":"boolean"},"isActive":{"type":"boolean"},"accountId":{"type":"string","description":"ID de la cuenta (Account) asociada al punto"}}},"FormResponseInVisitDto":{"type":"object","properties":{"responseId":{"type":"string"},"formModelTitle":{"type":"string"},"formModelId":{"type":"string"}},"required":["responseId","formModelTitle","formModelId"]},"PointHistoryGestionDto":{"type":"object","properties":{"isContactable":{"type":"object"},"noContactReason":{"type":"string"},"formResponsesInVisit":{"type":"array","items":{"$ref":"#/components/schemas/FormResponseInVisitDto"}},"userName":{"type":"string"},"checkOut":{"type":"object"}},"required":["isContactable","formResponsesInVisit","userName"]},"PointHistoryListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PointHistoryGestionDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetAddressDto":{"type":"object","properties":{"pointId":{"type":"string"},"name":{"type":"string"},"clientName":{"type":"string"},"clientDocument":{"type":"string","description":"must be a RUT with valid format"},"addressNumber":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"email":{"type":"string"},"comments":{"type":"string"},"id":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["pointId","name","clientName","clientDocument","id","createdAt","updatedAt"]},"UpdateAddressDto":{"type":"object","properties":{"pointId":{"type":"string"},"name":{"type":"string"},"clientName":{"type":"string"},"clientDocument":{"type":"string","description":"must be a RUT with valid format"},"addressNumber":{"type":"string"},"phone":{"type":"string"},"mobile":{"type":"string"},"email":{"type":"string"},"comments":{"type":"string"}}},"RemoveAddressesDto":{"type":"object","properties":{"addresses":{"minItems":1,"description":"list of address ids to delete","type":"array","items":{"type":"string"}}},"required":["addresses"]},"PrimaryContactDto":{"type":"object","properties":{"contactName":{"type":"string"},"contactRole":{"type":"string","enum":["Representante Legal","Secretaria","Adquisición y compras","Encargado TI","Gerente Comercial","Dueño","Otro"]},"contactPhone":{"type":"string"},"contactEmail":{"type":"string"},"contactDocument":{"type":"string"}}},"AccountContactDto":{"type":"object","properties":{"contactName":{"type":"string","description":"Nombre del contacto"},"contactRole":{"type":"string","enum":["Representante Legal","Secretaria","Adquisición y compras","Encargado TI","Gerente Comercial","Dueño","Otro"],"description":"Rol del contacto"},"contactPhone":{"type":"string","description":"Teléfono del contacto"},"contactEmail":{"type":"string","description":"Email del contacto"},"contactDocument":{"type":"string","description":"Documento del contacto"},"isPrimary":{"type":"boolean","description":"Es el contacto principal","default":false}},"required":["contactName"]},"AccountUserDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"GetAccountDto":{"type":"object","properties":{"accountName":{"type":"string","description":"Nombre de la cuenta"},"accountDocument":{"type":"string","description":"Documento único (RUT/NIT/DNI)"},"accountDocumentType":{"type":"string","enum":["RUT","NIT","DNI","PASSPORT","OTHER"],"description":"Tipo de documento"},"accountType":{"type":"string","enum":["Cliente","Proveedor","Otro"],"description":"Tipo de cuenta"},"accountIndustry":{"type":"string","description":"Industria/rubro"},"accountSegment":{"type":"string","description":"Segmento comercial"},"parentAccountId":{"type":"string","description":"ID de cuenta matriz (si es sucursal)"},"primaryContact":{"description":"Contacto principal (legacy)","allOf":[{"$ref":"#/components/schemas/PrimaryContactDto"}]},"contacts":{"description":"Lista de contactos","type":"array","items":{"$ref":"#/components/schemas/AccountContactDto"}},"accountStatus":{"type":"string","enum":["active","inactive","prospect","churned"],"default":"active"},"isActive":{"type":"boolean","default":true},"id":{"type":"string"},"userIds":{"type":"array","items":{"$ref":"#/components/schemas/AccountUserDto"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"formResponsesCount":{"type":"number","description":"Cantidad de form-responses asociadas a esta cuenta"},"lastFormResponseDate":{"format":"date-time","type":"string","description":"Fecha de la última form-response (última gestión)"}},"required":["accountName","accountDocument","id","userIds","createdAt","updatedAt"]},"AccountListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetAccountDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items"]},"AccountDashboardStatsDto":{"type":"object","properties":{"topByFormResponses":{"description":"Top 10 cuentas por cantidad de form-responses","type":"array","items":{"type":"array"}},"urgencyDistribution":{"type":"object","description":"Distribución de cuentas por urgencia (tiempo sin gestión)","example":{"green":45,"yellow":23,"red":12,"noData":5}}},"required":["topByFormResponses","urgencyDistribution"]},"CreateAccountDto":{"type":"object","properties":{"accountName":{"type":"string","description":"Nombre de la cuenta"},"accountDocument":{"type":"string","description":"Documento único (RUT/NIT/DNI)"},"accountDocumentType":{"type":"string","enum":["RUT","NIT","DNI","PASSPORT","OTHER"],"description":"Tipo de documento"},"accountType":{"type":"string","enum":["Cliente","Proveedor","Otro"],"description":"Tipo de cuenta"},"accountIndustry":{"type":"string","description":"Industria/rubro"},"accountSegment":{"type":"string","description":"Segmento comercial"},"parentAccountId":{"type":"string","description":"ID de cuenta matriz (si es sucursal)"},"primaryContact":{"description":"Contacto principal (legacy)","allOf":[{"$ref":"#/components/schemas/PrimaryContactDto"}]},"contacts":{"description":"Lista de contactos","type":"array","items":{"$ref":"#/components/schemas/AccountContactDto"}},"accountStatus":{"type":"string","enum":["active","inactive","prospect","churned"],"default":"active"},"isActive":{"type":"boolean","default":true}},"required":["accountName","accountDocument"]},"UpdateAccountDto":{"type":"object","properties":{"accountName":{"type":"string","description":"Nombre de la cuenta"},"accountDocument":{"type":"string","description":"Documento único (RUT/NIT/DNI)"},"accountDocumentType":{"type":"string","enum":["RUT","NIT","DNI","PASSPORT","OTHER"],"description":"Tipo de documento"},"accountType":{"type":"string","enum":["Cliente","Proveedor","Otro"],"description":"Tipo de cuenta"},"accountIndustry":{"type":"string","description":"Industria/rubro"},"accountSegment":{"type":"string","description":"Segmento comercial"},"parentAccountId":{"type":"string","description":"ID de cuenta matriz (si es sucursal)"},"primaryContact":{"description":"Contacto principal (legacy)","allOf":[{"$ref":"#/components/schemas/PrimaryContactDto"}]},"contacts":{"description":"Lista de contactos","type":"array","items":{"$ref":"#/components/schemas/AccountContactDto"}},"accountStatus":{"type":"string","enum":["active","inactive","prospect","churned"],"default":"active"},"isActive":{"type":"boolean","default":true}}},"DuplicateInfoDto":{"type":"object","properties":{"row":{"type":"number","description":"Número de fila en Excel"},"accountDocument":{"type":"string","description":"Documento del account"},"accountName":{"type":"string","description":"Nombre del account en archivo"},"existing":{"type":"object","description":"Información del account existente"}},"required":["row","accountDocument","accountName","existing"]},"ValidationErrorDto":{"type":"object","properties":{"row":{"type":"number","description":"Número de fila en Excel (base 1)"},"sheet":{"type":"string","description":"Pestaña donde ocurrió el error"},"field":{"type":"string","description":"Campo con error"},"message":{"type":"string","description":"Mensaje de error"}},"required":["row","sheet","field","message"]},"BulkValidationResultDto":{"type":"object","properties":{"status":{"type":"string","description":"Estado de validación"},"mode":{"type":"string","enum":["full","partial"],"description":"Modo de carga detectado"},"summary":{"type":"object","description":"Resumen de validación"},"duplicates":{"description":"Duplicados encontrados","type":"array","items":{"$ref":"#/components/schemas/DuplicateInfoDto"}},"errors":{"description":"Errores de validación","type":"array","items":{"$ref":"#/components/schemas/ValidationErrorDto"}},"validationToken":{"type":"string","description":"Token para la fase 2"}},"required":["status","summary"]},"DuplicateDecisionDto":{"type":"object","properties":{"accountDocument":{"type":"string","description":"Documento del account"},"action":{"type":"string","enum":["skip","update","merge"],"description":"Acción a tomar"}},"required":["accountDocument","action"]},"BulkImportDto":{"type":"object","properties":{"validationToken":{"type":"string","description":"Token de validación obtenido en fase 1"},"strategy":{"type":"string","enum":["skip","update","merge","ask"],"description":"Estrategia para manejar duplicados"},"decisions":{"description":"Decisiones individuales (solo si strategy = ask)","type":"array","items":{"$ref":"#/components/schemas/DuplicateDecisionDto"}}},"required":["validationToken","strategy"]},"BulkImportResultDto":{"type":"object","properties":{"status":{"type":"string","description":"Estado de importación"},"mode":{"type":"string","enum":["full","partial"],"description":"Modo de importación ejecutado"},"summary":{"type":"object","description":"Resumen de importación"},"errors":{"description":"Errores durante importación","type":"array","items":{"$ref":"#/components/schemas/ValidationErrorDto"}},"createdAccountIds":{"description":"IDs de accounts creados","type":"array","items":{"type":"string"}}},"required":["status","summary"]},"CreateTeamDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"supervisorId":{"type":"string"},"executives":{"type":"array","items":{"type":"string"}}},"required":["name","supervisorId","executives"]},"WarehouseAddressDto":{"type":"object","properties":{"address":{"type":"string"},"street":{"type":"string"},"municipality":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"number":{"type":"string"},"region":{"type":"string"}},"required":["address","street","municipality","lat","lng","number","region"]},"GetWarehouseDto":{"type":"object","properties":{"isActive":{"type":"boolean"},"name":{"type":"string"},"description":{"type":"string"},"region":{"type":"string"},"address":{"$ref":"#/components/schemas/WarehouseAddressDto"},"id":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["isActive","name","description","region","address","id","createdAt","updatedAt"]},"WarehouseListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetWarehouseDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"WarehouseDto":{"type":"object","properties":{"isActive":{"type":"boolean"},"name":{"type":"string"},"description":{"type":"string"},"region":{"type":"string"},"address":{"$ref":"#/components/schemas/WarehouseAddressDto"}},"required":["isActive","name","description","region","address"]},"GetProductDto":{"type":"object","properties":{"isActive":{"type":"boolean"},"name":{"type":"string"},"description":{"type":"string"},"sku":{"type":"string"},"stockType":{"type":"string","enum":["TRAZABLE","CONTABLE","INTANGIBLE"]},"price":{"type":"number"},"id":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["isActive","name","description","sku","stockType","price","id","createdAt","updatedAt"]},"ProductListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetProductDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"ProductDto":{"type":"object","properties":{"isActive":{"type":"boolean"},"name":{"type":"string"},"description":{"type":"string"},"sku":{"type":"string"},"stockType":{"type":"string","enum":["TRAZABLE","CONTABLE","INTANGIBLE"]},"price":{"type":"number"}},"required":["isActive","name","description","sku","stockType","price"]},"BaseInventoryDto":{"type":"object","properties":{"productId":{"type":"string"},"barcode":{"type":"string"},"quantity":{"type":"number"},"type":{"type":"object"},"productName":{"type":"string"},"warehouseName":{"type":"string"},"warehouseId":{"type":"string"},"price":{"type":"number"}},"required":["productId","barcode","quantity","type","productName","warehouseName","warehouseId","price"]},"bulkInventoryOperationResponse":{"type":"object","properties":{"id":{"type":"string"},"error":{"type":"string"},"errorBarcode":{"type":"string"},"dto":{"$ref":"#/components/schemas/BaseInventoryDto"}}},"Assignment":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"barcode":{"type":"string"},"quantity":{"type":"number"},"status":{"type":"string"},"packageId":{"type":"string"}},"required":["userId","userName","barcode","quantity","status","packageId"]},"GetProductStockByWarehouse":{"type":"object","properties":{"assignments":{"type":"array","items":{"$ref":"#/components/schemas/Assignment"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["assignments","meta"]},"GetWarehouseProductSummary":{"type":"object","properties":{"warehouseId":{"type":"string"},"warehouseName":{"type":"string"},"productId":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"sku":{"type":"string"},"description":{"type":"string"},"inWarehouse":{"type":"number"},"pendingAssignment":{"type":"number"}},"required":["warehouseId","warehouseName","productId","type","name","sku","description","inWarehouse","pendingAssignment"]},"GetWarehouseProductsSummaryList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetWarehouseProductSummary"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetTransactionHistoryByWarehouse":{"type":"object","properties":{"id":{"type":"string"},"barcode":{"type":"string"},"status":{"type":"string"},"quantity":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"type":"string"}},"required":["id","barcode","status","quantity","createdAt","updatedAt","userId"]},"ProductInventoryHistoryByWarehouse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetTransactionHistoryByWarehouse"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"MappedWarehouseHistory":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"}},"required":["id","name","region"]},"MappedFormResponseHistory":{"type":"object","properties":{"responseId":{"type":"string"},"modelId":{"type":"string"},"name":{"type":"string"}},"required":["responseId","modelId","name"]},"MappedUserHistory":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"Package":{"type":"object","properties":{}},"GetTransactionHistoryByBarcode":{"type":"object","properties":{"id":{"type":"string"},"barcode":{"type":"string"},"status":{"type":"string"},"quantity":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"warehouse":{"$ref":"#/components/schemas/MappedWarehouseHistory"},"formResponse":{"$ref":"#/components/schemas/MappedFormResponseHistory"},"user":{"$ref":"#/components/schemas/MappedUserHistory"},"package":{"$ref":"#/components/schemas/Package"}},"required":["id","barcode","status","quantity","createdAt","updatedAt","warehouse","formResponse","user","package"]},"ProductInventoryHistoryByBarcode":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetTransactionHistoryByBarcode"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"ProductWarehouseResponse":{"type":"object","properties":{"barcode":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"productId":{"type":"string"},"quantity":{"type":"number"},"sku":{"type":"string"},"type":{"type":"string"}},"required":["barcode","description","name","productId","quantity","sku","type"]},"GetWarehouseProductsList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProductWarehouseResponse"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"ProductUserStockDetail":{"type":"object","properties":{"warehouseId":{"type":"string"},"barcode":{"type":"string"},"quantity":{"type":"number"},"status":{"type":"string"}},"required":["warehouseId","barcode","quantity","status"]},"GetProductStockByUser":{"type":"object","properties":{"inInventory":{"type":"number"},"pendingAssignment":{"type":"number"},"stockDetail":{"type":"array","items":{"$ref":"#/components/schemas/ProductUserStockDetail"}}},"required":["inInventory","pendingAssignment","stockDetail"]},"UserProductSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isActive":{"type":"boolean"},"type":{"type":"string"},"inInventory":{"type":"number"},"pendingAssignment":{"type":"array","items":{"type":"string"}},"barcode":{"type":"string"},"products":{"type":"array","items":{"type":"string"}},"barcodes":{"type":"array","items":{"type":"string"}},"inventoryId":{"type":"string"},"packageId":{"type":"string"}},"required":["id","name","isActive","type","inInventory","pendingAssignment","barcode","products","barcodes","inventoryId","packageId"]},"GetTransactionHistoryByUser":{"type":"object","properties":{"id":{"type":"string"},"barcode":{"type":"string"},"status":{"type":"string"},"quantity":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"warehouse":{"$ref":"#/components/schemas/MappedWarehouseHistory"},"formResponse":{"$ref":"#/components/schemas/MappedFormResponseHistory"},"user":{"$ref":"#/components/schemas/MappedUserHistory"}},"required":["id","barcode","status","quantity","createdAt","updatedAt","warehouse","formResponse","user"]},"ProductInventoryHistoryByUser":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetTransactionHistoryByUser"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"PackageDto":{"type":"object","properties":{"products":{"description":"List of products that are part of the package","items":{"type":"array"},"type":"array"}},"required":["products"]},"ProductOnPackage":{"type":"object","properties":{}},"PackageProductsPaginationDto":{"type":"object","properties":{"page":{"type":"number","description":"Current page number"},"limit":{"type":"number","description":"Items per page limit"},"totalItems":{"type":"number","description":"Total number of products"},"totalPages":{"type":"number","description":"Total number of pages"}},"required":["page","limit","totalItems","totalPages"]},"GetPackageProductsList":{"type":"object","properties":{"items":{"description":"List of products","type":"array","items":{"$ref":"#/components/schemas/ProductOnPackage"}},"pagination":{"$ref":"#/components/schemas/PackageProductsPaginationDto"}},"required":["items"]},"IntegrationsDto":{"type":"object","properties":{"products":{"type":"boolean"},"crm":{"type":"boolean"},"visits":{"type":"boolean"},"geolocation":{"type":"boolean"}},"required":["products","crm","visits","geolocation"]},"FormState":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"requiredState":{"type":"string"},"readPermission":{"type":"string"},"actionPermission":{"type":"string"},"textColor":{"type":"string"},"backgroundColor":{"type":"string"}},"required":["id","name","requiredState","readPermission","actionPermission","textColor","backgroundColor"]},"CreateFormModelDto":{"type":"object","properties":{"title":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"integrations":{"$ref":"#/components/schemas/IntegrationsDto"},"states":{"type":"array","items":{"$ref":"#/components/schemas/FormState"}}},"required":["title","roles","integrations","states"]},"FormIntegrations":{"type":"object","properties":{"products":{"type":"boolean"},"crm":{"type":"boolean"},"visits":{"type":"boolean"},"geolocation":{"type":"boolean"}},"required":["products","crm","visits","geolocation"]},"GetFormModel":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"inputs":{"type":"array","items":{"type":"string"}},"integrations":{"$ref":"#/components/schemas/FormIntegrations"},"states":{"type":"array","items":{"type":"string"}},"roles":{"type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","title","inputs","integrations","states","roles","createdAt","updatedAt"]},"InputDto":{"type":"object","properties":{"fieldId":{"type":"string"},"type":{"type":"string"},"value":{"type":"object"}},"required":["fieldId","type","value"]},"GpsDto":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}},"required":["latitude","longitude"]},"IntegrationResponseDto":{"type":"object","properties":{"products":{"type":"array","items":{"type":"object"}},"crm":{"type":"string"},"geolocation":{"$ref":"#/components/schemas/GpsDto"},"promos":{"type":"array","items":{"type":"object"}}},"required":["products","crm","geolocation","promos"]},"CreateFormResponseDto":{"type":"object","properties":{"visitCompletedId":{"type":"object"},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/InputDto"}},"integrations":{"$ref":"#/components/schemas/IntegrationResponseDto"},"state":{"type":"string"}},"required":["visitCompletedId","inputs","integrations","state"]},"IntegrationResponse":{"type":"object","properties":{}},"GetFormResponse":{"type":"object","properties":{"id":{"type":"string"},"formModelId":{"type":"object"},"formTitle":{"type":"object"},"user":{"type":"object"},"visitCompletedId":{"type":"string"},"accountId":{"type":"string"},"state":{"type":"string"},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/InputDto"}},"integrations":{"$ref":"#/components/schemas/IntegrationResponse"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"correlative":{"type":"number"},"points_correlative":{"type":"object","nullable":true}},"required":["id","formModelId","formTitle","user","visitCompletedId","accountId","state","inputs","integrations","createdAt","updatedAt"]},"GetFormResponsesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetFormResponse"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetFormModelSummaryItem":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"integrations":{"$ref":"#/components/schemas/FormIntegrations"},"status":{"type":"string"},"responsesCount":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","title","integrations","status","responsesCount","createdAt","updatedAt"]},"GetStateHistoryDto":{"type":"object","properties":{"id":{"type":"string"},"formResponseId":{"type":"string"},"stateId":{"type":"string"},"stateName":{"type":"string"},"stateBackground":{"type":"string"},"stateColor":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"description":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","formResponseId","stateId","stateName","stateBackground","stateColor","userId","userName","description","createdAt","updatedAt"]},"CreatePackageTypeDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre único del tipo de paquete.","example":"Caja Pequeña"}},"required":["name"]},"PlanListDto":{"type":"object","properties":{}},"GetPlanDto":{"type":"object","properties":{}},"CreatePlanDto":{"type":"object","properties":{"name":{"type":"string","example":"Professional"},"code":{"type":"string","example":"professional"},"maxForms":{"type":"number","example":10},"maxResponses":{"type":"number","example":1000},"maxUsers":{"type":"number","example":50},"price":{"type":"number","example":99.99},"isActive":{"type":"boolean","example":true},"features":{"example":["Dashboard","Reportes","Soporte 24/7"],"type":"array","items":{"type":"string"}},"description":{"type":"string","example":"Plan ideal para empresas medianas"}},"required":["name","code","maxForms","maxResponses","maxUsers","price"]},"UpdatePlanDto":{"type":"object","properties":{"name":{"type":"string","example":"Professional Plus"},"maxForms":{"type":"number","example":20},"maxResponses":{"type":"number","example":2000},"maxUsers":{"type":"number","example":100},"price":{"type":"number","example":149.99},"isActive":{"type":"boolean","example":true},"features":{"example":["Dashboard","Reportes","Soporte Premium"],"type":"array","items":{"type":"string"}},"description":{"type":"string"}}},"CreateVisitCompletedDto":{"type":"object","properties":{"taskType":{"type":"string","enum":["FORM","VISIT"],"default":"VISIT"},"pointId":{"type":"string","description":"Point ID (required for VISIT, optional for others)"},"addressId":{"type":"string","deprecated":true,"description":"DEPRECATED: Use pointId instead"},"formId":{"type":"string","description":"Form model ID"},"accountId":{"type":"string","description":"Account ID (optional for FORM)"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"visitScheduledId":{"type":"string","description":"Reference to the scheduled task"}},"required":["userId","date"]},"GetVisitCompletedDto":{"type":"object","properties":{"id":{"type":"string"},"visitScheduledId":{"type":"object"},"taskType":{"type":"string","enum":["FORM","VISIT"]},"pointId":{"type":"object"},"addressId":{"type":"object","deprecated":true},"formId":{"type":"string"},"accountId":{"type":"string"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"CheckInAt":{"type":"object"},"CheckOutAt":{"type":"object"},"startedAt":{"type":"object"},"completedAt":{"type":"object"},"visitResponses":{"type":"array","items":{"type":"string"}},"latitude":{"type":"object"},"longitude":{"type":"object"},"isContactable":{"type":"object"},"noContactReason":{"type":"string"},"observation":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","visitScheduledId","taskType","userId","date","visitResponses","createdAt","updatedAt"]},"VisitCompletedListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetVisitCompletedDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"VisitCompletedReportDto":{"type":"object","properties":{"id":{"type":"string"},"visitScheduledId":{"type":"object"},"addressId":{"type":"string"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"CheckInAt":{"type":"object"},"CheckOutAt":{"type":"object"},"latitude":{"type":"object"},"longitude":{"type":"object"},"isContactable":{"type":"object"},"noContactReason":{"type":"string"},"observation":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","visitScheduledId","addressId","userId","date","CheckInAt","CheckOutAt","latitude","longitude","isContactable","noContactReason","observation","createdAt","updatedAt"]},"VisitCompletedReportListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VisitCompletedReportDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"VisitSummaryDto":{"type":"object","properties":{"userId":{"type":"string"},"scheduledVisits":{"type":"number"},"completedVisits":{"type":"number"},"completedExtraRouteVisits":{"type":"number"},"completedScheduledVisits":{"type":"number"},"formsWithoutVisits":{"type":"number"}},"required":["userId","scheduledVisits","completedVisits","completedExtraRouteVisits","completedScheduledVisits","formsWithoutVisits"]},"KpiInfoDto":{"type":"object","properties":{"usuario":{"type":"string","description":"Name of the user who performed the visits"},"fecha":{"type":"string","description":"Date of the scheduled visit"},"ruta":{"type":"string","description":"Name of the route"},"visitas programadas":{"type":"number","description":"Total number of points in the route"},"visitas realizadas":{"type":"number","description":"Total number of completed visits"},"visita fuera de ruta":{"type":"number","description":"Total number of off-route visits"},"primera visita":{"type":"string","description":"Timestamp of the first completed visit"},"ultima visita registrada":{"type":"string","description":"Timestamp of the last completed visit"},"cumplimiento":{"type":"string","description":"Completion rate as percentage"}},"required":["usuario","fecha","ruta","visitas programadas","visitas realizadas","visita fuera de ruta","primera visita","ultima visita registrada","cumplimiento"]},"CheckInVisitCompletedDto":{"type":"object","properties":{"CheckInAt":{"format":"date-time","type":"string"},"isContactable":{"type":"object"}},"required":["CheckInAt","isContactable"]},"CheckOutVisitCompletedDto":{"type":"object","properties":{"CheckOutAt":{"format":"date-time","type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"noContactReason":{"type":"string","enum":["address_not_exist","cannot_contact","wrong_address","other"]},"observation":{"type":"string"}},"required":["CheckOutAt","latitude","longitude","noContactReason","observation"]},"VisitConfigDto":{"type":"object","properties":{"source":{"type":"string","enum":["route","ad_hoc"],"description":"Source type: route or ad_hoc"},"routeId":{"type":"string","description":"Route ID (required if source is ROUTE)"},"pointIds":{"description":"Point IDs (required if source is AD_HOC)","type":"array","items":{"type":"string"}}},"required":["source"]},"ProjectContextDto":{"type":"object","properties":{"projectId":{"type":"string","description":"Project ID"},"projectName":{"type":"string","description":"Project name"},"projectColor":{"type":"string","description":"Project color"},"stageId":{"type":"string","description":"Project stage ID"},"stageName":{"type":"string","description":"Stage name"},"stageColor":{"type":"string","description":"Stage color"}},"required":["projectId"]},"CreateVisitScheduledDto":{"type":"object","properties":{"name":{"type":"string","description":"Custom name for the task"},"userId":{"type":"string","description":"User ID assigned to this task"},"date":{"format":"date-time","type":"string","description":"Scheduled date for the task"},"taskType":{"type":"string","enum":["FORM","VISIT"],"default":"VISIT","description":"Type of task"},"timeBlock":{"type":"string","enum":["MORNING","AFTERNOON","SPECIFIC"],"description":"Time block for the task"},"startTime":{"type":"string","description":"Start time in HH:mm format (when timeBlock is SPECIFIC)"},"endTime":{"type":"string","description":"End time in HH:mm format"},"estimatedDuration":{"type":"number","description":"Estimated duration in minutes"},"formIds":{"description":"Form model IDs (required for FORM task types)","type":"array","items":{"type":"string"}},"accountId":{"type":"string","description":"Account ID (optional for FORM)"},"visitConfig":{"description":"Visit configuration (for VISIT task type)","allOf":[{"$ref":"#/components/schemas/VisitConfigDto"}]},"priority":{"type":"string","enum":["LOW","NORMAL","HIGH","URGENT"],"default":"NORMAL"},"instructions":{"type":"string","description":"Instructions or notes for the task"},"project":{"description":"Project context (nested object with all project data)","allOf":[{"$ref":"#/components/schemas/ProjectContextDto"}]},"projectId":{"type":"string","description":"Project ID if task belongs to a project (legacy, use project.projectId)"},"projectName":{"type":"string","description":"Project name (legacy, use project.projectName)"},"stageId":{"type":"string","description":"Project stage ID if task belongs to a project stage (legacy, use project.stageId)"},"stageName":{"type":"string","description":"Project stage name (legacy, use project.stageName)"},"stageColor":{"type":"string","description":"Project stage color (legacy, use project.stageColor)"},"source":{"type":"string","enum":["route","ad_hoc"],"deprecated":true,"description":"DEPRECATED: Use visitConfig.source instead"},"routeId":{"type":"string","deprecated":true,"description":"DEPRECATED: Use visitConfig.routeId instead"},"addressIds":{"deprecated":true,"description":"DEPRECATED: Use visitConfig.pointIds instead","type":"array","items":{"type":"string"}}},"required":["userId","date"]},"GetVisitScheduledDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"taskType":{"type":"string","enum":["FORM","VISIT"]},"timeBlock":{"type":"string","enum":["MORNING","AFTERNOON","SPECIFIC"]},"startTime":{"type":"string"},"endTime":{"type":"string"},"estimatedDuration":{"type":"number"},"formId":{"type":"string","deprecated":true},"formIds":{"type":"array","items":{"type":"string"}},"accountId":{"type":"string"},"visitConfig":{"$ref":"#/components/schemas/VisitConfigDto"},"priority":{"type":"string","enum":["LOW","NORMAL","HIGH","URGENT"]},"instructions":{"type":"string"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","CANCELLED"]},"completedAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"project":{"type":"object","description":"Embedded project context with all project data"},"projectId":{"type":"string","description":"Project ID if task belongs to a project"},"stageId":{"type":"string","description":"Project stage ID if task belongs to a project stage"},"routeId":{"type":"string","deprecated":true},"source":{"type":"string","enum":["route","ad_hoc"],"deprecated":true},"addressIds":{"deprecated":true,"type":"array","items":{"type":"string"}},"isActive":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","date","taskType","priority","status","isActive","createdAt","updatedAt"]},"VisitScheduledListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GetVisitScheduledDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"GetVisitScheduledByUserDto":{"type":"object","properties":{"id":{"type":"string"},"routeId":{"type":"string"},"source":{"type":"string"},"date":{"format":"date-time","type":"string"},"name":{"type":"string"},"stateName":{"type":"string"},"visitsScheduled":{"type":"number"},"completedVisitsScheduled":{"type":"number"},"polygon":{"nullable":true,"description":"Polygon coordinates as [lat, lng] arrays","items":{"type":"array"},"type":"array"},"polygonColor":{"type":"object","nullable":true,"description":"Hex color for the polygon"},"taskType":{"type":"string","enum":["FORM","VISIT"],"description":"Type of task"},"timeBlock":{"type":"string","enum":["MORNING","AFTERNOON","SPECIFIC"],"description":"Time block for the task"},"startTime":{"type":"string","description":"Start time in HH:mm format"},"endTime":{"type":"string","description":"End time in HH:mm format"},"estimatedDuration":{"type":"number","description":"Estimated duration in minutes"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","CANCELLED"],"description":"Task status"},"priority":{"type":"string","enum":["LOW","NORMAL","HIGH","URGENT"],"description":"Task priority"},"formIds":{"description":"Form model IDs for FORM tasks","type":"array","items":{"type":"string"}},"formTitle":{"type":"string","description":"Form title (first form)"},"formTitles":{"description":"Form titles for all formIds","type":"array","items":{"type":"string"}},"formEntries":{"description":"Form entries with completion status for FORM tasks","type":"array","items":{"type":"object"}},"accountId":{"type":"string","description":"Account ID for FORM tasks"},"accountName":{"type":"string","description":"Account name for FORM tasks"},"instructions":{"type":"string","description":"Task instructions"},"project":{"type":"object","description":"Embedded project context with all project data"},"projectId":{"type":"string","description":"Project ID (legacy, use project.projectId)"},"stageId":{"type":"string","description":"Stage ID (legacy, use project.stageId)"},"priorityLevel":{"type":"string","description":"Priority level string format for mobile compatibility"},"projectColor":{"type":"string","description":"Project color hex (extracted from project.color)"},"stageColor":{"type":"string","description":"Stage color hex (extracted from project.stageColor)"},"addressIds":{"description":"Address/Point IDs for ad-hoc visits","type":"array","items":{"type":"string"}},"userId":{"type":"string","description":"User ID assigned to this task"},"CheckInAt":{"format":"date-time","type":"string","description":"Check-in timestamp from VisitCompleted (for FORM tasks)"},"CheckOutAt":{"format":"date-time","type":"string","description":"Check-out timestamp from VisitCompleted (for FORM tasks)"}},"required":["id","routeId","source","date","name","stateName","visitsScheduled","completedVisitsScheduled","polygon","polygonColor"]},"UpdateVisitScheduledDto":{"type":"object","properties":{"name":{"type":"string","description":"Custom name for the task"},"date":{"format":"date-time","type":"string","description":"Scheduled date for the task"},"timeBlock":{"type":"string","enum":["MORNING","AFTERNOON","SPECIFIC"],"description":"Time block for the task"},"startTime":{"type":"string","description":"Start time in HH:mm format"},"endTime":{"type":"string","description":"End time in HH:mm format"},"estimatedDuration":{"type":"number","description":"Estimated duration in minutes"},"formId":{"type":"string","deprecated":true,"description":"Single form model ID (deprecated, use formIds)"},"formIds":{"description":"Form model IDs","type":"array","items":{"type":"string"}},"accountId":{"type":"string","description":"Account ID"},"visitConfig":{"description":"Visit configuration","allOf":[{"$ref":"#/components/schemas/VisitConfigDto"}]},"priority":{"type":"string","enum":["LOW","NORMAL","HIGH","URGENT"]},"instructions":{"type":"string","description":"Instructions or notes for the task"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","CANCELLED"],"description":"Task status"},"projectId":{"type":"string","description":"Project ID if task belongs to a project"},"stageId":{"type":"string","description":"Project stage ID if task belongs to a project stage"},"isActive":{"type":"boolean","description":"Active status of the scheduled task"},"source":{"type":"string","enum":["route","ad_hoc"],"deprecated":true},"routeId":{"type":"string","deprecated":true},"addressIds":{"deprecated":true,"type":"array","items":{"type":"string"}}}},"CreateTaskCompletedDto":{"type":"object","properties":{"taskType":{"type":"string","enum":["FORM"]},"formIds":{"description":"Form model IDs","type":"array","items":{"type":"string"}},"accountId":{"type":"string","description":"Account ID (optional)"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"visitScheduledId":{"type":"string"},"startedAt":{"format":"date-time","type":"string"},"completedAt":{"format":"date-time","type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}},"required":["taskType","formIds","userId","date"]},"LineDto":{"type":"object","properties":{}},"DonutDto":{"type":"object","properties":{}},"BarDto":{"type":"object","properties":{}},"TableDto":{"type":"object","properties":{"formResponseId":{"type":"string"},"user":{"type":"string"},"date":{"format":"date-time","type":"string"}},"required":["formResponseId","user","date"]},"FunnelDto":{"type":"object","properties":{"state":{"type":"string"},"count":{"type":"number"},"conversionRate":{"type":"number"}},"required":["state","count","conversionRate"]},"HeatmapDto":{"type":"object","properties":{"dayOfWeek":{"type":"number"},"hour":{"type":"number"},"count":{"type":"number"}},"required":["dayOfWeek","hour","count"]},"UserRankingDto":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"totalForms":{"type":"number"},"completedForms":{"type":"number"},"completionRate":{"type":"number"},"avgTimeToComplete":{"type":"number"}},"required":["userId","userName","totalForms","completedForms","completionRate","avgTimeToComplete"]},"GetStatsDto":{"type":"object","properties":{"line":{"additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"allOf":[{"$ref":"#/components/schemas/LineDto"}]},"donut":{"additionalProperties":{"type":"number","example":1},"allOf":[{"$ref":"#/components/schemas/DonutDto"}]},"bar":{"additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"allOf":[{"$ref":"#/components/schemas/BarDto"}]},"table":{"type":"array","items":{"$ref":"#/components/schemas/TableDto"}},"funnel":{"type":"array","items":{"$ref":"#/components/schemas/FunnelDto"}},"heatmap":{"type":"array","items":{"$ref":"#/components/schemas/HeatmapDto"}},"userRanking":{"type":"array","items":{"$ref":"#/components/schemas/UserRankingDto"}}},"required":["line","donut","bar","table","funnel","heatmap","userRanking"]},"PromoFiltersDto":{"type":"object","properties":{"validFrom":{"type":"string"},"validTo":{"type":"string"},"region":{"type":"array","items":{"type":"string"}},"comuna":{"type":"array","items":{"type":"string"}},"route":{"type":"array","items":{"type":"string"}},"userId":{"type":"array","items":{"type":"string"}}}},"PromoDto":{"type":"object","properties":{"name":{"type":"string"},"productId":{"type":"string"},"type":{"type":"string","enum":["QUANTITY_TIER","PERCENTAGE"]},"filters":{"$ref":"#/components/schemas/PromoFiltersDto"},"condition":{"type":"object"},"weight":{"type":"number"},"combinable":{"type":"boolean"},"active":{"type":"boolean"}},"required":["name","productId","type","filters","condition","weight","combinable","active"]},"DireccionDto":{"type":"object","properties":{"address":{"type":"string","example":"Av. Providencia 1234, Santiago"},"region":{"type":"string","example":"Región Metropolitana"},"comuna":{"type":"string","example":"Providencia"},"calle":{"type":"string","example":"Av. Providencia"},"numero":{"type":"string","example":"1234"},"lat":{"type":"number","example":-33.4372},"lng":{"type":"number","example":-70.6345}},"required":["address","region","comuna","calle","numero","lat","lng"]},"SettingsDto":{"type":"object","properties":{"primaryColorLight":{"type":"string","description":"Color primario para modo claro","example":"#174dff"},"primaryColorDark":{"type":"string","description":"Color primario para modo oscuro","example":"#4e6bff"},"logoUrl":{"type":"string","description":"URL del logo de la aplicación","example":"https://s3.amazonaws.com/bucket/logo.png"},"logoDarkUrl":{"type":"string","description":"URL del logo dark de la aplicación","example":"https://s3.amazonaws.com/bucket/logo_dark.png"},"rut":{"type":"string","example":"12.345.678-9"},"telefono":{"type":"string","example":"+56 9 1234 5678"},"email":{"type":"string","example":"contacto@empresa.cl"},"razonSocial":{"type":"string","example":"Empresa Servicios Integrales SpA"},"giro":{"type":"string","example":"Servicios de Tecnología"},"direccion":{"$ref":"#/components/schemas/DireccionDto"}},"required":["primaryColorLight","primaryColorDark","rut","telefono","email","razonSocial","giro","direccion"]},"ActiveUserLocationDto":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"userAvatar":{"type":"string"},"deviceId":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"accuracy":{"type":"number"},"lastUpdate":{"format":"date-time","type":"string"},"isOnline":{"type":"boolean"},"deviceType":{"type":"string"}},"required":["userId","deviceId","latitude","longitude","lastUpdate","isOnline"]},"GPSTrackingHistory":{"type":"object","properties":{}},"DailyRouteSummaryDto":{"type":"object","properties":{"date":{"type":"string"},"totalDistance":{"type":"number"},"waypointCount":{"type":"number"},"activeTime":{"type":"number"},"idleTime":{"type":"number"},"startTime":{"format":"date-time","type":"string"},"endTime":{"format":"date-time","type":"string"},"status":{"type":"string"}},"required":["date","totalDistance","waypointCount","status"]},"RouteStatsDto":{"type":"object","properties":{"totalDistance":{"type":"number","description":"Distancia total en metros"},"totalDistanceKm":{"type":"number","description":"Distancia total en kilómetros"},"activeTimeMinutes":{"type":"number","description":"Tiempo activo en minutos"},"idleTimeMinutes":{"type":"number","description":"Tiempo detenido en minutos"},"averageSpeedKmh":{"type":"number","description":"Velocidad promedio en km/h"},"maxSpeedKmh":{"type":"number","description":"Velocidad máxima en km/h"},"waypointCount":{"type":"number","description":"Cantidad de waypoints"},"startLocation":{"type":"object","description":"Ubicación inicial"},"endLocation":{"type":"object","description":"Ubicación final"},"startTime":{"format":"date-time","type":"string","description":"Hora de inicio"},"endTime":{"format":"date-time","type":"string","description":"Hora de fin"}},"required":["totalDistance","totalDistanceKm","activeTimeMinutes","idleTimeMinutes","averageSpeedKmh","maxSpeedKmh","waypointCount"]},"ProjectSummaryDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","PAUSED","COMPLETED","CANCELLED"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"color":{"type":"string"},"stageCount":{"type":"number"},"taskCount":{"type":"number"},"completedTaskCount":{"type":"number"},"progress":{"type":"number"},"isActive":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","description","status","startDate","endDate","ownerId","teamIds","color","stageCount","taskCount","completedTaskCount","progress","isActive","createdAt","updatedAt"]},"ProjectListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectSummaryDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"ProjectStageDto":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"order":{"type":"number"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"color":{"type":"string"},"taskCount":{"type":"number"},"completedTaskCount":{"type":"number"},"progress":{"type":"number"},"isActive":{"type":"boolean"}},"required":["id","projectId","name","description","order","status","taskCount","completedTaskCount","progress","isActive"]},"ProjectDetailDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","PAUSED","COMPLETED","CANCELLED"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"color":{"type":"string"},"stageCount":{"type":"number"},"taskCount":{"type":"number"},"completedTaskCount":{"type":"number"},"progress":{"type":"number"},"isActive":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStageDto"}},"team":{"type":"array","items":{"type":"object"}}},"required":["id","name","description","status","startDate","endDate","ownerId","teamIds","color","stageCount","taskCount","completedTaskCount","progress","isActive","createdAt","updatedAt","stages"]},"CreateProjectDto":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"description":{"type":"string","description":"Project description"},"startDate":{"format":"date-time","type":"string","description":"Project start date"},"endDate":{"format":"date-time","type":"string","description":"Project end date"},"ownerId":{"type":"string","description":"Owner user ID (defaults to current user)"},"teamIds":{"description":"Team member user IDs","type":"array","items":{"type":"string"}},"color":{"type":"string","description":"Project color (hex)"},"templateId":{"type":"string","description":"Template ID to create from"}},"required":["name","startDate","endDate"]},"UpdateProjectDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","PAUSED","COMPLETED","CANCELLED"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"teamIds":{"type":"array","items":{"type":"string"}},"color":{"type":"string"},"isActive":{"type":"boolean"}}},"CreateStageDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"order":{"type":"number","description":"Order index (auto-assigned if not provided)"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"color":{"type":"string"}},"required":["name"]},"UpdateStageDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"order":{"type":"number"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"color":{"type":"string"},"isActive":{"type":"boolean"}}},"ReorderStagesDto":{"type":"object","properties":{"stageIds":{"description":"Stage IDs in new order","type":"array","items":{"type":"string"}}},"required":["stageIds"]},"CreateProjectTaskDto":{"type":"object","properties":{"name":{"type":"string"},"userId":{"type":"string"},"date":{"format":"date-time","type":"string"},"stageId":{"type":"string"},"taskBlockId":{"type":"string"},"estimatedDuration":{"type":"number"},"timeBlock":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"priority":{"type":"string"},"instructions":{"type":"string"},"formIds":{"type":"array","items":{"type":"string"}},"accountId":{"type":"string"}},"required":["name","userId","date"]},"GanttTaskBarDto":{"type":"object","properties":{"id":{"type":"string"},"taskId":{"type":"string"},"name":{"type":"string"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"color":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"stageId":{"type":"string"},"stageName":{"type":"string"}},"required":["id","taskId","name","startDate","endDate","status","priority","color"]},"GanttRowDto":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"avatar":{"type":"string"},"bars":{"type":"array","items":{"$ref":"#/components/schemas/GanttTaskBarDto"}}},"required":["id","label","bars"]},"GanttDataDto":{"type":"object","properties":{"projectId":{"type":"string"},"projectName":{"type":"string"},"dimension":{"type":"string","enum":["user","task"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"dateColumns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"$ref":"#/components/schemas/GanttRowDto"}}},"required":["projectId","projectName","dimension","startDate","endDate","dateColumns","rows"]},"TimelineTaskDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"date":{"format":"date-time","type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"color":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"}},"required":["id","name","date","status","priority","color"]},"TimelineCellDto":{"type":"object","properties":{"interval":{"type":"string"},"tasks":{"type":"array","items":{"$ref":"#/components/schemas/TimelineTaskDto"}},"count":{"type":"number"},"hasOverflow":{"type":"boolean"}},"required":["interval","tasks","count","hasOverflow"]},"TimelineRowDto":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"avatar":{"type":"string"},"cells":{"type":"array","items":{"$ref":"#/components/schemas/TimelineCellDto"}}},"required":["id","label","cells"]},"TimelineDataDto":{"type":"object","properties":{"projectId":{"type":"string"},"projectName":{"type":"string"},"dimension":{"type":"string","enum":["user","task"]},"interval":{"type":"string","enum":["day","week","month","quarter"]},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"intervals":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"$ref":"#/components/schemas/TimelineRowDto"}}},"required":["projectId","projectName","dimension","interval","startDate","endDate","intervals","rows"]},"StageProgressDto":{"type":"object","properties":{"stageId":{"type":"string"},"stageName":{"type":"string"},"totalTasks":{"type":"number"},"completedTasks":{"type":"number"},"progress":{"type":"number"}},"required":["stageId","stageName","totalTasks","completedTasks","progress"]},"ProjectProgressDto":{"type":"object","properties":{"totalTasks":{"type":"number"},"completedTasks":{"type":"number"},"inProgressTasks":{"type":"number"},"pendingTasks":{"type":"number"},"cancelledTasks":{"type":"number"},"overdueTasks":{"type":"number"},"progress":{"type":"number"},"stageProgress":{"type":"array","items":{"$ref":"#/components/schemas/StageProgressDto"}}},"required":["totalTasks","completedTasks","inProgressTasks","pendingTasks","cancelledTasks","overdueTasks","progress","stageProgress"]},"TemplateStageDto":{"type":"object","properties":{"name":{"type":"string"},"order":{"type":"number"},"durationDays":{"type":"number","default":7},"suggestedTaskBlocks":{"type":"array","items":{"type":"string"}}},"required":["name","order"]},"ProjectTemplateDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/TemplateStageDto"}},"stageCount":{"type":"number"},"isSystem":{"type":"boolean"},"isActive":{"type":"boolean"}},"required":["id","name","description","icon","stages","stageCount","isSystem","isActive"]},"ProjectTemplateListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectTemplateDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["items","meta"]},"CreateProjectTemplateDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string","default":"📄"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/TemplateStageDto"}}},"required":["name"]},"UpdateProjectTemplateDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/TemplateStageDto"}}}}}}}