diff --git a/system-spec.md b/system-spec.md deleted file mode 100644 index 11f9c9f..0000000 --- a/system-spec.md +++ /dev/null @@ -1,195 +0,0 @@ -# System Spec: - -The system must be able to handle anonymous one-off agents initiating requests. -Persistent users can claim agents to create persistent identities in the system. -Agents are the core actor object. -Agents can have different roles associated with them. Main roles: -* - ----- - -/* I don't know yet how to integrate govt address labels. - * Our system shouldn't care about gov't addresses except as - * search designators. The users think in terms of gov't addresses, - * but we design for coords and polygons. We are trying to move - * pkgs from one MapRegion to another. - * - * The user's supplied address is just a lookup designator for what we - * internally know as a MapRegion. This model automatically gives us - * some resilience against political addressing scheme changes, street - * name changes, etc. - * When a property is sold and consolidated, or split up though, that may - * still be difficult to handle. - */ -class GovernmentAddress -{ -}; - ----- - -struct MapCoordinate -{ - Longitude longitude; - Latitude latitude; -}; - -MapRegion -{ - vector coordinates; -}; - ----- - -// This is for information relevant to package delivery. -LogisticsEndpoint: MapRegion -{ - sh_ptr owner; -}; - -PackageSource: LogisticsEndpoint -{ -}; - -PackageDestination: LogisticsEndpoint -{ -}; - -class Warehouse: PackageSource, PackageDestination -{}; - ----- - -DeliveryRequest -{ - sh_ptr requester; - sh_ptr package; - sh_ptr source; - sh_ptr destination; -}; - ----- - -/* BridgedTripAttempts routes are how we link couriers together using - * our internal logic. All requests, including those which aren't - * actually bridged (i.e: hops.size()==1), are modeled as bridged trips. - */ - -class BridgedTripPlan -{ - sh_ptr deliveryRequest; - vector> hops; -}; - -BridgedTripAttempt -{ - sh_ptr -}; - -/* We don't have a notion of persistent "routes". We only have "TripPlans". - * A TripPlan is a proposed path for getting a pkg from a source to a dest. - * It has no persistent hysteretical effect on other future TripPlans. - * - * To whatever extent we have "routes" they are just suggested optimizations - * for fast lookup based on criteria like crime rates, favoured couriers, - * package loss rate, package damage rate, etc. - */ - -class TripPlan -{ - sh_ptr courier; - sh_ptr source; - sh_ptr destination; - sh_ptr optimizedRoute; -}; - -/* - * When a TripAttempt is unsuccessful, we just set the TripAttempt's Result - * appropriately - * and then potentially spawn a new Trip object to re-attempt. - */ -class TripAttempt -{ - - TripAttemptResult result; - sh_ptr tripPlan; - HandoverRecord handoverRecord; -}; - -class HandoverRecord -{ - string signatureFileName; -}; - -class TripAttemptResult -{ - /* Gov't suspension/termination is when an agent of gov't intervenes in - * a pkg's delivery. - * Compliance suspension/termination is when we internally intervene in - * pkg's delivery in order to enforce government's policy. - * Policy suspension/termination is when we internally intervene in a - * pkg's delivery because it violates an internal policy of ours. - */ - enum Result { - SUCCESS, RETRY, GOVT_SUSPENSION, GOVT_TERIMATION, COMPLIANCE_SUSPENSION, COMPLIANCE_TERMINATION, POLICY_SUSPENSION, POLICY_TERMINATION, CANCELED, FAILURE; - } result; - enum RetryReason { RETRY_WEATHER, RETRY_ROUTE_DISREPAIR, RETRY_LABOUR_STRIKE, RETRY_UNEXPECTED_DANGER } retryReason; - - enum GovernmentSuspensionReason { GOVT_SUSPENSION_AWAIT_LICENSE, GOVT_SUSPENSION_AWAIT_INSPECTION } governmentSuspensionReason; - enum GovernmentTermination { - GOVT_TERMINATION_UNKNOWN, GOVT_TERIMINATION_AWAIT_LICENCE_TIMEOUT, GOVT_TERMINATION_SIEZED - } governmentTerminationReason; - - enum ComplianceSuspensionReason { - COMPLIANCE_SUSPENSION_MISSING_DOCUMENTATION, COMPLIANCE_SUSPENSION_INSURANCE_EXPIRED, - COMPLIANCE_SUSPENSION_SAFETY_VIOLATION, COMPLIANCE_SUSPENSION_LEGAL_CHECK_PENDING, - COMPLIANCE_SUSPENSION_TEMPORARY_AUDIT - } complianceSuspensionReason; - enum ComplianceTerminationReason { - COMPLIANCE_TERMINATION_DOCUMENTATION_FAILED, COMPLIANCE_TERMINATION_INSURANCE_INVALID, - COMPLIANCE_TERMINATION_PERSISTENT_SAFETY_VIOLATION, - COMPLIANCE_TERMINATION_LEGAL_NONCOMPLIANCE, - COMPLIANCE_TERMINATION_REGULATORY_ORDER - } complianceTerminationReason; - - enum PolicySuspensionReason { - POLICY_SUSPENSION_VIOLATED_INTERNAL_RULE, - POLICY_SUSPENSION_PAYMENT_ISSUE, - POLICY_SUSPENSION_TEMPORARY_BAN, - POLICY_SUSPENSION_FRAUD_RISK, POLICY_SUSPENSION_MANUAL_REVIEW - } policySuspensionReason; - enum PolicyTerminationReason { - POLICY_TERMINATION_BLACKLISTED, - POLICY_TERMINATION_REPEATED_POLICY_VIOLATION, - POLICY_TERMINATION_PAYMENT_DEFAULT, POLICY_TERMINATION_FRAUD_CONFIRMED, - POLICY_TERMINATION_MANUAL_BLOCK - } policyTerminationReason; - - enum CancelationReason { USER_CANCELED } cancelationReason; - enum FailureReason { FAILURE_PKG_LOST, FAILURE_PKG_STOLEN } failureReason; - string details; -}; - ----- - -CrimeProfile -{ -}; - ----- - -class Courier -{ - vector> reach; -}; - ----- - - - -Courier: A courier is not the same as an org. A multi-region courier is represented as an org with multiple member couriers. We internally model each branch/repo of a big org as an individual "courier". A courier is a region-locked agent with vehicles for moving packages. - * MapRegion. - * - - * ResidentialLocation. - * WarehouseLocation. - *