{"record":{"id":"6d83328907b0e11a","repo":"ZhuLinsen/daily_stock_analysis","slug":"conflict","errorCode":"conflict","errorMessage":"Duplicate trade_uid for account_id={account_id}: {trade_uid}","messagePattern":"Duplicate trade_uid for account_id=(.+?): (.+?)","errorType":"http","errorClass":"PortfolioConflictError","httpStatus":409,"severity":"error","filePath":"src/services/portfolio_service.py","lineNumber":254,"sourceCode":"                row = self.repo.add_trade_in_session(\n                    session=session,\n                    account_id=account_id,\n                    trade_uid=trade_uid_norm,\n                    symbol=symbol_norm,\n                    market=market_norm,\n                    currency=currency_norm,\n                    trade_date=trade_date,\n                    side=side_norm,\n                    quantity=float(quantity),\n                    price=float(price),\n                    fee=float(fee),\n                    tax=float(tax),\n                    note=(note or \"\").strip() or None,\n                    dedup_hash=dedup_hash_norm,\n                )\n                return {\"id\": int(row.id)}\n        except (DuplicateTradeUidError, DuplicateTradeDedupHashError) as exc:\n            raise PortfolioConflictError(str(exc)) from exc\n\n    def record_cash_ledger(\n        self,\n        *,\n        account_id: int,\n        event_date: date,\n        direction: str,\n        amount: float,\n        currency: Optional[str] = None,\n        note: Optional[str] = None,\n    ) -> Dict[str, Any]:\n        direction_norm = (direction or \"\").strip().lower()\n        if direction_norm not in VALID_CASH_DIRECTIONS:\n            raise ValueError(\"direction must be in or out\")\n        if amount <= 0:\n            raise ValueError(\"amount must be > 0\")\n        with self.repo.portfolio_write_session() as session:\n            account = self._require_active_account_in_session(session=session, account_id=account_id)","sourceCodeStart":236,"sourceCodeEnd":272,"githubUrl":"https://github.com/ZhuLinsen/daily_stock_analysis/blob/5159bd72e8373d215492dff122acc9d389e219c9/src/services/portfolio_service.py#L236-L272","documentation":"Error \"Duplicate trade_uid for account_id={account_id}: {trade_uid}\" thrown in ZhuLinsen/daily_stock_analysis.","triggerScenarios":"Thrown at src/services/portfolio_service.py:254 when the library encounters an invalid state.","commonSituations":"Raised when a trade with the same trade_uid already exists for the account; occurs on duplicate imports or retried trade submissions.","solutions":["Ensure each trade_uid is unique per account; regenerate or deduplicate IDs in the import source.","If re-importing, delete or skip previously imported trades with the same trade_uid.","Fix the upstream export that produced duplicate trade_uids."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5159bd72e8373d215492dff122acc9d389e219c9","analyzedAt":"2026-08-15T01:59:36.292Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}